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

来源:互联网 发布:macbook下载软件免费 编辑:程序博客网 时间:2024/05/26 07:29

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

xml配置文件中添加converter


<bean 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>

pom 文件(在原来的基础上添加了jackson-dataformat-xml的依赖,这里jackson为2.8.7版本)

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>${jackson.version}</version></dependency>


controller文件(这个controller本就是@restcontroller)

@RequestMapping(value = "txml", headers = { "content-type=application/xml;charset=UTF-8"})public Object testXml(@RequestBody Xml xml) {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();}Test_DtoOut tdo = new Test_DtoOut();tdo.code = 200;tdo.msg = xml.getToUserName();return tdo;}


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

package com.mufeng.dto.in;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.annotation.JsonRootName;@JsonRootName(value="out")public class Xml {@JsonProperty(value="toUserName")String toUserName;@JsonProperty(value="fromUserName")String fromUserName;@JsonProperty(value="CreateTime")Long createTime;@JsonProperty(value="MsgType")String msgType;@JsonProperty(value="Event")String event;

package com.mufeng.dto.out;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.annotation.JsonRootName;import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;//@JacksonXmlRootElement(localName="out")@JsonRootName(value="out")public class Test_DtoOut {@JsonProperty(value="codes")public Integer code;public String msg;

前端文件html(注意前端代码要放到服务器上,浏览器输入url,否则contentType不会起作用)

<html>  <head>  <meta http-equiv="Content-Type" content="application/xml; charset=UTF-8">  <title>测试接收XML格式的数据</title>  <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>  <!-- <script type="text/javascript" src="js/json2.js"></script>  --><script type="text/javascript">  $(document).ready(function(){      sendxml();  });    function sendxml(){      var xmlData = "<out><toUserName>toUser</toUserName><fromUserName>FromUser</fromUserName><CreateTime>123456789</CreateTime><MsgType>event</MsgType><Event>subscribe</Event></out>";   $.ajax({            type: "POST",            url: "http://localhost:8080/valida/webctrl/demo/txml",                                // data sent is xmlcontentType: "application/xml; charset=utf-8",                data: xmlData,                 // data in response will expected xml                dataType: "xml",processData: false,                anysc: false,beforeSend: function(request) {                       request.setRequestHeader('Access-Control-Allow-Origin: *');   request.setRequestHeader('Access-Control-Allow-Methods: POST,GET,OPTIONS');   request.overrideMimeType('application/xml; charset=utf-8')   console.log(JSON.stringify(request));                 },                success: function (result) { console.log(result);                },                error: function (XMLHttpRequest, textStatus, errorThrown) {                    alert(errorThrown + ':' + textStatus); // 错误处理                }            });}  </script>  </head>  <body>  </body>  </html>  

后端控制台打印

{"toUserName":"toUser","fromUserName":"FromUser","CreateTime":123456789,"MsgType":"event","Event":"subscribe"}

前端接收到返回值

<out><msg>toUser</msg><codes>200</codes></out>



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

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

原创粉丝点击