原生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类型属性对应的参数名,结果也是正常的
时间: 2024-10-05 04:09:41