Spring MVC转换JSON数据

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));
    }
}

发送

返回