1.添加依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
2.继承WebMvcConfigurationSupport,MappingJackson2XmlHttpMessageConverter设置接收xml
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Resource
private AuthorizationInterceptor authorizationInterceptor;
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html")//swagger过滤防止404
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
//定义时间格式转换器,json数据中long型日期转为特定格式
@Bean
public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
converter.setObjectMapper(mapper);
return converter;
}
/**
* 添加自定义的Converters和Formatters.
*/
@Override
protected void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverterConfig());
}
/**
* 设置响应的字符集,防止中文乱码
*
* @return
*/
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
return converter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(responseBodyConverter());
converters.add(jackson2HttpMessageConverter());
//接收XML请求数据
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
builder.indentOutput(true);
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
}
}
3.xml映射实体
package com.mall.wx.util;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
/**
* 微信支付结果异步推送XML数据包实体
*/
@JacksonXmlRootElement(localName = "xml")
public class PayResultXMLEntity {
// 返回状态码
@JacksonXmlProperty(localName = "return_code")
protected String returnCode;
// 返回信息
@JacksonXmlProperty(localName = "return_msg")
protected String returnMsg;
// 业务结果
@JacksonXmlProperty(localName = "result_code")
protected String resultCode;
// 商户订单号
@JacksonXmlProperty(localName = "out_trade_no")
protected String outTradeNo;
// 支付完成时间
@JacksonXmlProperty(localName = "time_end")
protected String timeEnd;
// 微信支付订单号
@JacksonXmlProperty(localName = "transaction_id")
protected String transactionId;
// 订单金额
@JacksonXmlProperty(localName = "total_fee")
protected String totalFee;
// 商户号
@JacksonXmlProperty(localName = "mch_id")
protected String mchId;
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
public String getReturnMsg() {
return returnMsg;
}
public void setReturnMsg(String returnMsg) {
this.returnMsg = returnMsg;
}
public String getReturnCode() {
return returnCode;
}
public String getResultCode() {
return resultCode;
}
public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public String getTimeEnd() {
return timeEnd;
}
public void setTimeEnd(String timeEnd) {
this.timeEnd = timeEnd;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getTotalFee() {
return totalFee;
}
public void setTotalFee(String totalFee) {
this.totalFee = totalFee;
}
public String getMchId() {
return mchId;
}
public void setMchId(String mchId) {
this.mchId = mchId;
}
@Override
public String toString() {
return "PayResultXMLEntity{" +
"returnCode='" + returnCode + '\'' +
", returnMsg='" + returnMsg + '\'' +
", resultCode='" + resultCode + '\'' +
", outTradeNo='" + outTradeNo + '\'' +
", timeEnd='" + timeEnd + '\'' +
", transactionId='" + transactionId + '\'' +
", totalFee='" + totalFee + '\'' +
", mchId='" + mchId + '\'' +
'}';
}
}
4.controller
@PostMapping(value = "/notify")
public String notify(@RequestBody PayResultXMLEntity resultXMLEntity) {
}