`

SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

    博客分类:
  • SSH
阅读更多

转载文章...

 

今天开发过程中,在SpringMVC中的Action中处理前台ajax请求传过来 的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语法问题或者不能满足请求),调试了好长时间才解决了,特意记录下来,并和大家一同分享一 下。

        出现这个错误的原因一般最常见的就是后台的实体类bean与前台穿过的类型不匹配,我的就是,因为的javabean中有定义了Date类型和int类型的成员变量,导致转化器在把json数据转化成bean时不能转化,其实如果用JSONObject.toBean方法转化时,这种情况也会报错的。

       1、我的解决办法就是把实体类的 javabean里边的类型都改成string类型了,在配置SQL语句时用数据库函数to_date或者to_number转化的,如果再java中用 到这个字符串类型的日期的话,有必要的话,就用For format=new SimpleDateFormat("yyyy-MM-dd"),format.parse()来转换。

       2、其实还可以在实体类中定义Date和int类型对应的字符串类型成员变量,这样前台的表单中field或者name与之对应上即可,这样也成功转成实体类了,不过转成之后,得在java中把它字符串类型的转成对应的Date或者int类型赋给相应的成员变量即可。

       3、在就是还有一种方法就是在对应的实体类的对应的非字符串类型的变量的setter方法中传入string类型的,然后在里边用SimpleDateFormat或者Integer进行转化。

       4、最后还有一种方法,就是实体类 的日期属性上加@DateTimeFormat(pattern="yyyy-MM-dd")注解,大部分是可以成功使用的。如果这种方法不可用的话,你 看继续尝试如下方法:不过这个前提是前台穿过的日期为json形式而非字符串形式,如前台类似$("#id").val()来获取日期直接传给后台的话是 不行的,你需要在前台引入JSON官网的json.js库或者引入jQuery的jquery.json-2.4.js库,然后如果是前者的话就new Date(stringDate).parseJSON()来转化再传给后台,如果是后者的话,$.toJSON(new Date(stringdate))来传给后台,这种方式比较麻烦,有网友留言特意讨论了一下这个问题,所以建议采用第一种方式。

       如果你有更好的更优秀的方式解决这种问题,还请您手下留情,留下您的宝贵意见,以使大家共同的学习和成长。

       网上我看了一些有关问题,看网友们还有一些其他原因导致这个错误的,特总结归纳了一下方便网友们参考:

(1)log4j的配置文件里错误将部分log打为Info级别所致
(2)传参数的时候,参数名使用了关键字“name”(我试了试,我的没报错正常)
(3)本来要返回json的却忘了加@RequestBody
(4)ajax请求的连接后边忘了加参数

(5)前台传参时参数的顺序与后台实体类的各个属性的顺序不一致(我试了试,我的顺序改变无影响)

(6)如果是传了非实体bean属性的参数过来也会发生这种情况

 注意:关于日期类型互相转换的问题,本人重新写了一篇博文:SpringMVC日期类型转换问题三大处理方法归纳,相信会有效解决您遇到的问题!

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/43740759


        最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......

分享到:
评论

相关推荐

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

    在这个例子中,`createUser` 方法使用 `@RequestBody` 从请求体中获取JSON数据并转换为 `CreateUserRequest` 对象。而 `getUser` 方法返回一个 `User` 对象,通过 `@ResponseBody` 将其转换为JSON并返回给客户端。 ...

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)

    在实际开发中,`@RequestBody` 和 `@ResponseBody` 的组合使用使得Spring MVC能够轻松地处理RESTful API的请求和响应。它们简化了数据交换的过程,减少了手动序列化和反序列化的代码,提高了开发效率。通过理解这两...

    springMVC3使用@ResponseBody向浏览器返回 json,注意区分jar包前缀

    --处理 @ResponseBody 中文乱码问题 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- Support ...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...

    Springmvc 4.x利用@ResponseBody返回Json数据的方法

    在Spring MVC 4.x版本中,开发者可以使用@ResponseBody注解来简化控制器层向客户端返回JSON格式数据的过程。 ### @ResponseBody注解使用方法 @ResponseBody注解可以作用于方法上,它会指示Spring MVC框架将该方法...

    SpringMVC中后台转换json格式

    通过以上配置和代码,你应该能够成功地在SpringMVC中处理JSON格式的数据,从而避免406错误。确保所有依赖库都已引入,并正确配置SpringMVC,以实现后台与前台之间的顺利JSON数据交互。在实际项目中,还可能需要考虑...

    springMVC+ajax+json

    在这个例子中,`MyData`对象会被序列化成JSON并发送回客户端,客户端的Ajax回调函数可以接收到这个JSON对象并进行处理。 总结来说,Spring MVC提供了一个强大的后端框架,Ajax实现了页面的异步更新,而JSON则作为...

    springmvc操作json数据所需的jar包

    在控制器中,我们可以使用`@RequestBody`和`@ResponseBody`注解来处理JSON数据。`@RequestBody`用于将请求体中的JSON数据映射到方法参数,而`@ResponseBody`则将方法返回的对象转换为JSON并写入响应体。 例如: ```...

    SpringMVC利用Ajax,JQuery交互Json

    本教程将深入讲解如何在SpringMVC中利用Ajax和JQuery来交互Json数据。 首先,让我们理解什么是Json。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成...

    SpringMVC使用@ResponseBody.rar

    在Spring MVC框架中,`@ResponseBody`是一个非常关键的注解,它用于处理HTTP请求的响应数据,并将其直接转换为HTTP响应体中的内容。这个注解通常与控制器(Controller)方法一起使用,允许我们将Java对象直接序列...

    springMVC json格式转换demo

    本示例"springMVC json格式转换demo"将展示如何在Spring MVC应用中处理JSON格式的数据。 首先,确保你的项目依赖于`spring-web`模块,因为该模块包含了处理JSON所需的支持。在Maven的pom.xml文件中,添加以下依赖:...

    springMvc注解之 ResponseBody和 RequestBody.docx

    `@RequestBody`用于从请求体中读取JSON数据并映射到方法参数,而`@ResponseBody`则将方法的返回值转换为JSON并发送到客户端。它们极大地简化了JSON数据在前后端之间的传递,减少了手动序列化和反序列化的代码,提高...

    SpringMVC框架中传递JSON数据时前台报406错误解决办法

    在Spring MVC框架中,开发人员经常需要处理JSON数据进行前后端交互。然而,在实际操作中,我们可能会遇到一个常见的问题,即HTTP状态码406(Not Acceptable)。这个错误通常意味着服务器生成了响应,但客户端无法...

    spring MVC 对 ResponseBody返回json数据进行脱敏处理

    本文将详细讨论如何在Spring MVC中针对`ResponseBody`返回的JSON数据进行脱敏处理。 首先,我们需要了解`ResponseBody`注解的作用。在Spring MVC中,当控制器方法的返回值前加上`@ResponseBody`时,Spring会将返回...

    Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输

    本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它展示了如何利用这些技术进行前后端的数据交互。下面我们将详细探讨这些知识点。 首先,`Maven`是Java项目管理工具,它...

    springmvc+国际化i18N+springmvc验证+jetbrick-template使用+@responsebody+谷歌guava

    springmvc+国际化i18N+springmvc验证+jetbrick-template使用+@responsebody+谷歌guava: 1)围绕springmvc做的国际化 2)围绕springmvc做的验证 3)使用的jetbrick-template模板引擎 ……

    SpringMVC中使用JSON传递数据时用的jar包

    在Spring MVC框架中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它被广泛用于前后端交互,尤其是在Ajax请求中。JSON因其简洁、易读的特性,成为了现代Web开发中的首选数据格式。本篇文章将深入...

    springMVC使用Ajax请求数据

    - 在SpringMVC的`@Controller`类中,定义一个处理Ajax请求的方法。通过`@RequestMapping`注解指定URL映射,并使用`@RequestParam`来获取请求参数。例如: ```java @RestController public class AjaxController ...

    springmvc中json转换的jar

    3. **控制器方法**:在控制器的方法中,使用`@RequestBody`和`@ResponseBody`注解来接收和返回JSON数据。Spring MVC会自动使用相应的MessageConverter进行转换。 通过这种方式,Spring MVC可以无缝地处理JSON请求和...

    springmvc + jquery + ajax + json 异步传递数据

    在SpringMVC中,可以使用`@ResponseBody`注解将方法返回的对象直接转换为JSON字符串,然后通过Ajax返回给客户端。 实现SpringMVC、jQuery、Ajax和JSON的异步传递数据,首先需要配置SpringMVC的DispatcherServlet和...

Global site tag (gtag.js) - Google Analytics