分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

原生Ajax报400错误

发布时间:2023-09-06 01:10责任编辑:熊小新关键词:Ajax400错误

原生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)@ResponseBodypublic 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= 250startDate= 2017-09-11endDate= 2017-09-19

      完全正常了!

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

  

原生Ajax报400错误

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved