使用jackson转换xml格式数据进行响应

Posted lz2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jackson转换xml格式数据进行响应相关的知识,希望对你有一定的参考价值。

最近在做微信扫码支付的功能,按照微信开发文档与支付平台进行数据交互只能使用XML格式的数据,调用别人定义的接口就需要按规则来嘛,没办法。自己之前使用jackson,主要是因为SpringMVC默认将jackson作为数据转换的工具,而且默认也是以JSON格式进行处理的,之前本人使用过XStream将数据转换为XML格式,想着jackson应该也可以做这件事,有个produces属性可以指定响应的数据格式

@PostMapping(value = "/wx/notify", produces = "application/xml")

结果直接出现Content type ‘text/xml;charset=UTF-8‘ not supported ,根据这个错也容易知道肯定是没有解析成功,原来是jackson转换XML还需要添加一个jar

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.8</version>
</dependency>

添加这个jar之后就OK了,对了在写微信回调接口的时候一定要保证这个接口的幂等性,因为有极大的可能这个接口会被多次回调,同时在这个方法中需要校验签名(key),以及校验out_trade_no(商户订单号)
total_fee(订单金额)这些也是微信支付开发文档中写了的。最后接口返回字符串,jackson可以将字符串转换为XML,返回的这段数据是必须且格式固定,微信只有接收到这段数据才不会继续回调

return "<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>";

以上是关于使用jackson转换xml格式数据进行响应的主要内容,如果未能解决你的问题,请参考以下文章

XML编程总结——使用JAXB进行java对象和xml格式之间的相互转换

Jackson:为 Map 数据结构注册自定义 XML 序列化程序

等效于@JsonIgnore,但仅适用于使用 Jackson 的 xml 字段/属性转换

Java—Json数据格式转换需要的Jar包

Rest easy 3 + Jackson + Tomcat + XML 响应

Azure APIM:将 JSON 响应转换为自定义 XML 格式