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