您的位置:首页 > 理论基础 > 计算机网络

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

2017-11-14 18:15 567 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐