SpringMVC转换XML数据

SpringMVC提供了处理XML格式请求/相应的HttpMessageConverter,如JaxbRootElementHttpMessageConverter通过JAXB2读写XML消息,并将请求消息转换到注释XmlRootElement和XmlType作用的类中.
因此只需要在SpringWeb容器中为RequestMappingHandlerAdapter装配处理XML的HttpMessageConverter,并在交互过程中通过请求的Accept指定MIME类型,SpringMVC就可以使服务器端的处理方法和客户端XML格式的消息进行通信了.开发者几乎无须关心通信层数据格式的问题,可以将精力集中到业务处理上面.
在Spring的官方文档说明中,SpringMVC默认使用JaxbRootElementHttpMessageConverter转换XML格式的数据,JAXB(Java Architecture for XML Binding)可以很方便的生成XML,也能够很方便的生成JSON,这样一来可以更好的在XML和JSON之间进行转换.
JAXB是一个业界标准,是一项可以根据XML,Schema产生Java类的技术.在该过程中,JAXB提供了将XML文档反向生成Java对象的方法,并能将java对象的内容重新写到XML实例文档中,从而使得java开发者在Java应用程序中能够很方便的处理XML数据.
JAXB的常用注释包括:@XmlRootElement,@XmlElement等等
示例:接收XML数据
1.配置springmvc-config

<!-- 配置annotation类型的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
            <list>
                <ref bean="fastJsonHttpMessageConverter" />
                <ref bean="xmlHttpMessageConverter" />
            </list>
        </property>
</bean>

<bean id="xmlHttpMessageConverter" class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
    <property name="supportedMediaTypes">
        <list>
            <value>application/xml;charset=UTF-8</value>
        </list>
    </property>
    <property name="prettyPrint" value="false"/>
</bean>

2.视图文件

<!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>XML</title>
    <script src="http://inter.kingsoft.com/assets/6a8b4400/jquery.js"></script>
</head>
<body>
    <h2>XML test</h2>
    <script>
$(function(){
    init_list();
});
var data = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><book><id>1</id><name>我是书名</name><author>我是作者</author></book>';
function init_list()
{
    $.ajax({
        type: "POST",
        contentType:'application/xml;charset=UTF-8',
        cache: false,
        url: "${pageContext.request.contextPath}/interface/xml2book",
        data: data,
        success: function (message) {
            console.log(message);
        },
        error: function (message) {
            console.log(message);
        }
    });
}
</script>
</body>
</html>

3.控制器接收XML

package org.fkit.controller;
import org.fkit.domain.Book_xml;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class XmlInterfaceController
{
    @RequestMapping("/interface/xml2book")
    public void showList(
            @RequestBody Book_xml book_xml
            )
    {
        System.out.println(book_xml.getName());
        
    }
}