码迷,mamicode.com
首页 > Web开发 > 详细

原生Ajax报400错误

时间:2017-09-11 14:21:17      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:amp   for   bsp   ping   中文   round   包装类   java内置   strong   

原生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错误

标签:amp   for   bsp   ping   中文   round   包装类   java内置   strong   

原文地址:http://www.cnblogs.com/InformationGod/p/7504612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!