原生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类型属性对应的参数名,结果也是正常的

  

时间: 2024-10-05 04:09:41

原生Ajax报400错误的相关文章

SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User { 4 5 private int userId; 6 private String userName; 7 private Date createDate; 8 9 public

Yii2请求,报400错误

出现400错误是yii2.0的csrf防范策略导致 在components里面添加request配置如下: 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValid

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法

系统:WIN7 数据库:mysql 开发工具:Eclipse 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 . 在controller使用对象来接收前台页面的date数据类型时报400错误 下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇日期格式报400错误解决方法

系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User {

java springMVC 报400错误问题

java springMVC 中如果报400错误 很有可能是因为时间转换的问题. 我在项目中就遇到了这个问题,是因为我少引用了一个库,如果是因为时间问题的话添加以下依赖就可以解决. 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-time</artifactId> 4 <version>1.3</version> 5 </depende

SpringMVC form 表单提交报400错误

错误代码: HTTP Status 400 - type Status report message description The request sent by the client was syntactically incorrect. Apache Tomcat/7.0.47 原因: 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求.在 SpringMVC 中的 Action 中处理前台 ajax 请求传过来的 json 数据直接转成对应的实

Unable to verify your data submission.加入了_csrf也报400错误的解决

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->csrfToken?>" />如果你添加了以上标签还是报错那么你需要坚持看完这篇文档 刚开始做Yii2开发的程序猿基本上都遇到过这个错误,因为在程序设计中避免不了的要向服务器提交数据,那就需要使用到表单.其实这个错误的提示很明确的其中文错误就是提交的数据验证不通过.我们下来分析导致这个

django关闭debug后,报400错误

原文出处:https://stackoverflow.com/questions/19875789/django-gives-bad-request-400-when-debug-false 在Apache下部署django ,当关闭debug后,前台连接时,报 BAD REQUEST (400) 这个提示 找了一番,还是在stackoverflow上找到答案的,当关闭debug后,需要将 ALLOWED_HOSTS = ['*']可以匹配任意host访问

springmvc 使用ajax报406错误

1.这段时间开发使用springmvc技术,前端的使用html5.ajax 2.平常写action链接的时候使用.html都没有问题,今天在查询列表数据的时候出现ajaxj中Query.parseJSON(XMLHttpRequest.responseText);报错, 3.导致这个原因是因为ajax里面使用.html为后缀的url 版权声明:本文为博主原创文章,未经博主允许不得转载.