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