Spring Boot接收xml参数

学无止境,气有浩然!

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报文的,所以我们需要使响应responsecontent-type也是xml。这个时候就需要在@PostMappingproduces设置为XML,也就是MediaType.APPLICATION_XML_VALUE。他会根据配置的xmlbean自动转换。

打完收工!

相关推荐
Jabes.yang4 小时前
Java面试场景:从Spring Web到Kafka的音视频应用挑战
大数据·spring boot·kafka·spring security·java面试·spring webflux
程序员小凯7 小时前
Spring Boot性能优化详解
spring boot·后端·性能优化
六元七角八分7 小时前
pom.xml
xml·数据库
tuine7 小时前
SpringBoot使用LocalDate接收参数解析问题
java·spring boot·后端
番茄Salad8 小时前
Spring Boot项目中Maven引入依赖常见报错问题解决
spring boot·后端·maven
摇滚侠9 小时前
Spring Boot 3零基础教程,yml配置文件,笔记13
spring boot·redis·笔记
!if9 小时前
springboot mybatisplus 配置SQL日志,但是没有日志输出
spring boot·sql·mybatis
阿挥的编程日记10 小时前
基于SpringBoot的影评管理系统
java·spring boot·后端
java坤坤10 小时前
Spring Boot 集成 SpringDoc OpenAPI(Swagger)实战:从配置到接口文档落地
java·spring boot·后端
摇滚侠11 小时前
Spring Boot 3零基础教程,整合Redis,笔记12
spring boot·redis·笔记