Spring MVC提供了处理JSON格式请求和相应的HttpMessageConverter:
MappingJackson2HttpMessageConverter.利用Jackson开源类包处理JSON格式的请求或响应消息.因此只需要在Spring MVC容器中为RequestMappingHandlerAdapter装配处理JSON的HttpMessageConverter,并在交互过程中通过请求Accept指定MIME类型,SpringMvc就可以使服务器端的处理方法和客户端JSON格式的消息进行通信了,开发者几乎无需关心通信层数据格式的问题,可以将精力集中到业务处理上面.
org.springframework.web.bind.annotation.RequestBody注释用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到Controller中方法的参数上.
当前台页面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定.可以分为以下几种情况:
application/x-www-form-urlencoded,这种情况的数据@RequestParam,@ModelAttribute也可以处理,并且很方便,当然@RequestBody也能处理.
multipart/form-data,@RequestBody不能处理这种格式的数据
application/json,application/xml等格式的数据,必须使用@RequestBody来处理
在实际开发工作中使用@RequestBody注释可以很方便的接收JSON格式的数据,并将其转换成对应的数据类型.
Spring的官方文档说明,SpringMVC默认使用MappingJackson2HttpMessageConverter转换JSON格式的数据,Jackson开源类包可以非常轻松的将Java对象转换成json对象和xml文档,同样也可以将json对象,xml文档转成java对象.
示例:接收JSON格式的数据
1.视图
<!DOCTYPE HTML> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" > <head> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <meta content="text/html;charset=UTF-8"/> <title>JSON</title> <script src="http://inter.kingsoft.com/assets/6a8b4400/jquery.js"></script> </head> <body> <h2>json</h2> <script> $(function(){ init_list(); }); var data = {'id':1,'name':'aaa'}; function init_list() { $.ajax({ type: "POST", dataType : "json", contentType:'application/json;charset=UTF-8', cache: false, url: "/springTest/interface/json2book", data: JSON.stringify(data), success: function (message) { console.log(message); }, error: function (message) { console.log(message); } }); } </script> </body> </html>
2.修改配置
<!-- 配置annotation类型的处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonHttpMessageConverter" /> </list> </property> </bean> <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean>
3.控制器(渲染视图)
package org.fkit.controller; @Controller public class JsonController { @RequestMapping("/showList") public String showList() { return "json/showList"; } }
4.模型Book
public class Book implements Serializable { private Integer id; private String name; private String author; public Book() { super(); } public Book(Integer id,String name,String author) { super(); this.setId(id); this.setName(name); this.setAuthor(author); } ...
5.控制器(处理JSON)
package org.fkit.controller; @Controller @ResponseBody public class InterfaceController { @RequestMapping(value="/interface/json2book",method=RequestMethod.POST,consumes = "application/json") public void json2book( @RequestBody Book book, HttpServletResponse response ) throws Exception { System.out.println(book); System.out.println(book.getName()); ObjectMapper mapper = new ObjectMapper(); book.setAuthor("liulibo"); response.setContentType("text/html;charset=UTF-8"); response.getWriter().println(mapper.writeValueAsString(book)); } }
发送
返回