一、引包
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.7</version>
</dependency>
二、配置XML转换器
@Configuration
public class MessageConverterConfig extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
builder.indentOutput(true);
converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
}
}
三、controller层
@RequestMapping(value = "/creditLoanApplyNotify", method = RequestMethod.POST,consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public String creditLoanApplyNotify(@RequestBody CreditLoanApplyNotifyDto req) {
// 自己逻辑
}
四、响应的XML没有xml头
这种:<?xml version="1.0" encoding="UTF-8"?>
起作用的是: xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
String requestBody = xmlMapper.writeValueAsString(req);
五、对于复杂的xml
比如xml长这样:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<response>
<head>
<appId>ANK85</appId>
<function>apply.notify</function>
<inputCharset>UTF-8</inputCharset>
<reqMsgId>201803300309471966</reqMsgId>
<reserve>1.0.0.20180621</reserve>
<respTime>201909191</respTime>
<respTimeZone>UTC+8</respTimeZone>
<signType>RSA</signType>
<version>1.0.0</version>
</head>
<body>
<applyNo>2018033</applyNo>
<requestId>A</requestId>
<resultInfo>
<resultCode>000</resultCode>
<resultMsg>sign check fail</resultMsg>
<retry>N</retry>
</resultInfo>
</body>
</response>
<signature>arfLohOxOIL0BOry==</signature>
</document>
处理示例:
@JacksonXmlRootElement(localName = "document")
@Data
public class CreditLoanApproveAckNotifyDto {
@JacksonXmlElementWrapper(localName ="request")
private Request request;
@JacksonXmlProperty(localName = "signature")
private String signature;
@Data
public class Request {
@JacksonXmlElementWrapper(localName ="head")
private Header head;
@JacksonXmlElementWrapper(localName ="body")
private NotifyDomain body;
}
}