上一篇分析了Spring中是如何通过使用@ResponseBody注解,实现自动转换Java对象为XML,JSON数据到Reponse中。
接下来看看如果request中包含了XML或者JSON数据,反过来,如何来通过@RequestBody注解来自动转换为Java对象。
配合@RequestBody注解,以及HTTP Request Header中的Content-Type属性,HTTP Request Body中包含的XML或者JSON数据可以自动被转换成对应的Java对象。
1).首先在controller中添加handlermapping
/** * 根据request header中的Content-Type自动转换XML/JSON->UserDTOX对象 * 根据request header中的Accept自动选择返回XML or JSON */ @ResponseBody @RequestMapping(value="/createUser", method = RequestMethod.POST) public UserDTOX createUser(@RequestBody UserDTOX userDTOX) { logger.debug("creating a UserDTO:[{}]", userDTOX); return new UserDTOX("Hi " + userDTOX.getName(), userDTOX.getAge() + 1); }
2).运行以下两个测试函数
@Test public void testJsonRequestResponse() throws IOException, URISyntaxException { String url = "http://localhost:8080/SpringMVC/createUser"; HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("Accept", "application/json"); requestHeaders.set("Content-Type", "application/json"); String jsonStr = "{\"name\":\"Jack\",\"age\":16}"; RestTemplate restTemplate = new RestTemplate(); HttpEntity<String> httpEntity = new HttpEntity<String>(jsonStr, requestHeaders); String jsonData = restTemplate.postForObject(url, httpEntity, String.class); System.out.println(jsonData); } @Test public void testXmlRequestResponse() throws IOException, URISyntaxException { String url = "http://localhost:8080/SpringMVC/createUser"; HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("Accept", "application/xml"); requestHeaders.set("Content-Type", "application/xml"); String xmlStr = "<userDTOX><name>Jack</name><age>16</age></userDTOX>"; RestTemplate restTemplate = new RestTemplate(); HttpEntity<String> httpEntity = new HttpEntity<String>(xmlStr, requestHeaders); String xmlData = restTemplate.postForObject(url, httpEntity, String.class); System.out.println(xmlData); }
3).我们甚至可以任意组合请求和应答中的XML/JSON。比如Request=XML,Response=JSON
@Test public void testXmlRequestJsonResponse() throws IOException, URISyntaxException { String url = "http://localhost:8080/SpringMVC/createUser"; HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("Accept", "application/json"); requestHeaders.set("Content-Type", "application/xml"); String xmlStr = "<userDTOX><name>Jack</name><age>16</age></userDTOX>"; RestTemplate restTemplate = new RestTemplate(); HttpEntity<String> httpEntity = new HttpEntity<String>(xmlStr, requestHeaders); String jsonData = restTemplate.postForObject(url, httpEntity, String.class); System.out.println(jsonData); }
类似上一篇中的分析,最关键的处理在AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters()。它会根据request header中的Content-Type属性来选择合适的message converter。
另外,如果不想使用<mvc:annotation-driven/>中默认的RequestMappingHandlerAdapter的话,我们可以在重新定义这个bean,spring会覆盖掉默认的RequestMappingHandlerAdapter。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> </list> </property> </bean>
或者如果只想换messageConverters的话。
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.example.MyHttpMessageConverter"/> <bean class="org.example.MyOtherHttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>
相关推荐
NULL 博文链接:https://bijian1013.iteye.com/blog/2310236
浅析@ReponseBody和@RequestBody注解主要讲述了@ReponseBody的作用和@RequestBody的作用和springMvc内部是如何对他们进行解析的
模拟了基本前端与后端交互JSon数据,使用了Java语言+Maven+SpringMVC+Ajax @RequestBody+Json传输完成基本数据交互
主要介绍了SpringMVC restful 注解之@RequestBody进行json与object转换的相关资料,需要的朋友可以参考下
如果传输的是多层嵌套json对象,这个时候会就会出现数据丢失问题 @ResponseBody很好的解决了这个问题,它会把前台传输过来的json转化为后台对应的对象
本篇文章主要介绍了springMvc注解之@ResponseBody和@RequestBody详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
-- @ResponseBody() spring-mvc 3 xml 配置--> <!--处理 @ResponseBody 中文乱码问题 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> ...
springMVC相关技术配置使用注解的HandlerMapping和HandlerAdapter使用<mvc:annotation-driver> 不过springBoot已经省略了这些配置 配置使用注解的Handler和Service...@RequestBody,@ResponseBody--json与java对象转换
用来解决SpringMVC+Ajax技术中前台报406的错误信息,实现后台json格式与前台一致
本文主要介绍了springmvc实现json交互-requestBody和responseBody的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
2.请求头中正确设置了Content-Type参数及参数值,但是在项目jar依赖中(pom.xml或build.gradle)没有添加处理json字符串的处理类
今天小编就为大家分享快速解决SpringMVC @RequestBody 用map接收请求参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了详解SpringMVC @RequestBody接收Json对象字符串,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
常用来处理content-type不是默认的application/x-...好比:application/json或者是application/xml等,常常用来其来处理application/json类型 注意:@requestBody接收的是前端传过来的json字符串,而不是对象
springmvc中json转换的jar,包含jackson-core-asl.jar和Jackson-mapper-asl.jar
springmvc对json支持
主要介绍了SpringMVC中解决@ResponseBody注解返回中文乱码问题, 小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SpringMVC使用@ResponseBody.rar
SpringMVC通过@ResponseBody传送json字符串到客户端,实现了REST接口远程调用功能,demo中使用的版本为spring3.2,代码中用到了注解,代码直接部署运行,已经通过测试(如在浏览器中输入...客户端返回后台传递的json格式数据)