学无止境,气有浩然!
Spring Boot接收xml参数
前言
最近工作又要做挡板,挡板的东西有点多😀,主要是因为下游是第三方收费的,提供的测试环境的数据不能随心所欲修改,只能通过挡板模拟。
这次的第三方下游系统也是通过xml
进行传输的,不过这次是通过http
协议的post
请求,请求体是xml
协议。
方案
当然我们可以通过接受这个请求体,然后把他变成转换成我们需要的
bean
,处理结果之后再将bean
转换为xml
字符串传递回去。
虽然是个笨办法,也是可以实现的。本次记录的是利用Spring Boot
的自动转换来进行实现,会自动将请求体转换为bean
,并且将bean
转为xml
自动返回。
秘诀就是@RequestBody
他会自动帮你转换成bean
,但是需要引入相关依赖,就是之前博客提到的 Spring boot项目java bean和xml互转
实现
当按照上篇博客介绍的一切准备就绪之后,就会进行自动转换。
代码示例
- Controller
java
@PostMapping(value = "/test", produces = {MediaType.APPLICATION_XML_VALUE})
public ResponseEntity<ResultDto> test(@RequestBody RequestDto requestDto) {
return ResponseEntity.ok(testService.test(requestDto));
}
-
POJO
- 请求
java@Setter @XmlRootElement(name="Request") public class RequestDto { private String name; private String password; private String mobile; private String idCard; @XmlAttribute public String getName() { return name; } @XmlAttribute public String getPassword() { return password; } @XmlAttribute public String getMobile() { return mobile; } @XmlAttribute public String getIdCard() { return idCard; } }
- 响应
java
@Setter
@XmlRootElement(name = "Response")
public class ResultDto {
private String reason;
private String retCode;
private String errMsg;
@XmlAttribute
public String getReason() {
return reason;
}
@XmlAttribute
public String getRetCode() {
return retCode;
}
@XmlAttribute
public String getErrMsg() {
return errMsg;
}
}
说明:
@RequestBody
会根据配置的XML
(之前博客提到的),自动解析成所需要的bean
。这里用到的是jax
。- 由于我需要的报文全是配置在方法体里的,所以全部使用的
@XmlAttribute
。- 返回的报文也需要返回
xml
报文的,所以我们需要使响应response
的content-type
也是xml
。这个时候就需要在@PostMapping
的produces
设置为XML
,也就是MediaType.APPLICATION_XML_VALUE
。他会根据配置的xml
将bean
自动转换。