spring基于xml格式的前后端数据交换的配置 之 MarshallingHttpMessageConverter + xstream

来源:互联网 发布:多益网络校园招聘 编辑:程序博客网 时间:2024/05/05 20:22

MarshallingHttpMessageConverter 方式解析xml(支持注解修改元素别名)配置及代码如下:

xml配置文件中添加converter

<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">        <constructor-arg>        <bean class="org.springframework.oxm.xstream.XStreamMarshaller">        <property name="streamDriver">            <bean class="com.thoughtworks.xstream.io.xml.StaxDriver"/>        </property>        <property name="annotatedClasses">            <list>                <value>com.mufeng.dto.in.Xml</value>                <value>com.mufeng.dto.out.TestDtoOut</value>            </list>        </property>    </bean>            </constructor-arg>        <property name="supportedMediaTypes">                <list>                <value>application/xml;charset=UTF-8</value>                <value>text/xml;charset=UTF-8</value>                <value>text/html;charset=UTF-8</value>                </list>                </property></bean>


pom文件

<!-- xstream xml start --><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.10</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.3.7.RELEASE</version></dependency><!-- xstream xml end -->

controller文件

@RequestMapping(value = "txml", headers={"content-type=application/xml"})public Object testXml(@RequestBody Xml xml/*, HttpServletRequest req*/) {try {ObjectMapper mapper = new ObjectMapper();mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).enable(JsonGenerator.Feature.IGNORE_UNKNOWN).enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES);System.out.println(mapper.writeValueAsString(xml));} catch (JsonProcessingException e) {e.printStackTrace();}TestDtoOut tdo = new TestDtoOut();tdo.code = 200;tdo.msg = "";//xml.getToUserName();return tdo;}

两个出入参dto(只截部分代码)

package com.mufeng.dto.in;import com.thoughtworks.xstream.annotations.XStreamAlias;@XStreamAlias(value="xml")public class Xml {@XStreamAlias(value="ToUserName")String toUserName;String FromUserName;Long CreateTime;String MsgType;Long MsgId;String Content;

package com.mufeng.dto.out;import com.thoughtworks.xstream.annotations.XStreamAlias;@XStreamAlias(value="testDtoOut")public class TestDtoOut {public Integer code;public String msg;


前端文件html

<html><head><script type="text/javascript">  var xmlData = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>";var xmlhttp;function loadXMLDoc(url){xmlhttp=null;if (window.XMLHttpRequest)  {// all modern browsers  xmlhttp=new XMLHttpRequest();  }else if (window.ActiveXObject)  {// for IE5, IE6  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  }if (xmlhttp!=null)  {  xmlhttp.onreadystatechange=state_Change;  xmlhttp.open("POST",url,true);  xmlhttp.setRequestHeader("Accept","application/xml");   xmlhttp.setRequestHeader("Content-Type","application/xml");   xmlhttp.send(xmlData);  }else  {  alert("Your browser does not support XMLHTTP.");  }}function state_Change(){if (xmlhttp.readyState==4)  {// 4 = "loaded"  if (xmlhttp.status==200)    {// 200 = "OK"    document.getElementById('p1').innerHTML="This file was last modified on: " + xmlhttp.getResponseHeader('Last-Modified');    }  else    {    alert("Problem retrieving data:" + xmlhttp.statusText);    }  }}</script></head><body><p id="p1">The getResponseHeader() function returns a header from a resource.Headers contain file information like length,server-type, content-type, date-modified, etc.</p><button onclick="loadXMLDoc('http://localhost:8080/valida/webctrl/demo/txml')">Get "Last-Modified"</button></body></html>


另外一种使用jackson实现xml数据交换的配置,详见另一篇博客

http://blog.csdn.net/vincent_field/article/details/78535990


原创粉丝点击