原生Ajax报400错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生Ajax报400错误相关的知识,希望对你有一定的参考价值。

原生ajax报400错误,网上一般说参数错误。。看着老是误以为是参数名写错了


 

但是我遇到的错误不是这个原因。

后台配置的spring,然后前端我想用原生的ajax用提交数据;接收参数的时候我是直接用一个java对象接收的

public class Plan {
    
    private int planId;
    private int fatherPlanId;
    private String fatherPlanName;
    private String planName;
    private int task;
    private int startPage;
    private int endPage;
    private Date startDate;
    private Date endDate;
@RequestMapping(value="/saveKeyWord"},method=RequestMethod.POST)
@ResponseBody
public int saveKeyWord(Plan plan){

错误情形1:Java后台无法将前端传过来的数据,转化成除基本类型(含包装类型)及字符串类型外的其他Java内置类型(下面可以看到,我可以用我自定义的Plan类型(不含Date类型)接收数据,但是不能用Date类型接收数据)

1、ajax get请求:

  最开始,我用的ajax get方法请求数据,直接用 url+"key1=value1&key2=value2"的形式向服务器发送数据,前端和后台的数据发送接收都没有任何问题;

2、ajax post请求:

  数据采用ajax post方法提交的时候,数据放在ajax对象的 send()方法中,还是以“key1=”+var1+"&key2="+var2的形式发送(注意中文或其他特殊字符要encodeURI(data)一下),结果老是报400错误;

  然后我把上面的 Plan 对象换成各个具体的格式的数据试试,如下代码:

    @ResponseBody
    public int savePlan(String planName,int task,Date startDate,Date endDate){
        log.info("");
        System.out.println("planName= "+planName);
        System.out.println("task= "+task);
        System.out.println("startDate= "+startDate);
        System.out.println("endDate= "+endDate);

  结果仍然报 400错误,错误原因如下:

九月 11, 2017 12:59:52 下午 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleTypeMismatch
警告: Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type ‘java.lang.String‘ to required type ‘java.util.Date‘; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value ‘2017-09-11‘; nested exception is java.lang.IllegalArgumentException

  看到原因了吧,后台无法将字符串格式的日期转化为Date类型。然后我再将接收数据的Date类型换成String类型试试:

public int savePlan(String planName,int task,String startDate,String endDate){
        log.info("");
        System.out.println("planName= "+planName);
        System.out.println("task= "+task);
        System.out.println("startDate= "+startDate);
        System.out.println("endDate= "+endDate);

  ajax post再次请求,结果如下:  

九月 11, 2017 1:02:24 下午 study.read.controller.FirstTry savePlan
信息: 
planName= Netty实战
task= 250
startDate= 2017-09-11
endDate= 2017-09-19

      完全正常了!

 

  如果我把上面的数据接收格式换成(Plan plan),而发送数据的时候,不发送Date类型属性对应的参数名,结果也是正常的

 

  

以上是关于原生Ajax报400错误的主要内容,如果未能解决你的问题,请参考以下文章

springmvc ajax传递字符串过长报错400bad request

AJAX请求返回HTTP 400 错误 - 请求无效 (Bad request)

AJAX请求返回HTTP 400 错误 - 请求无效 (Bad request)

Yii框架用ajax提交表单时候报错Bad Request (#400): Unable to verify your data submission.

前台JSON数据传送数据到后台,报400错误怎么解决

Razor中的Jquery Ajax Post Object响应400错误代码