学无止境,气有浩然!
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自动转换。