首页 > 技术文章 > 使用jackson转换xml格式数据进行响应

lz2017 2019-10-05 11:15 原文

最近在做微信扫码支付的功能,按照微信开发文档与支付平台进行数据交互只能使用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>";

推荐阅读