Spring Boot接收xml参数

本文介绍了如何使用SpringBoot处理通过HTTPPOST请求的XML数据,通过`@RequestBody`自动将XML转换为JavaBean,再将处理后的Bean转换回XML并返回。展示了Controller、POJO和XML注解的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。
在这里插入图片描述

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;
        @XmlAttribute
        public String getName() {
            return name;
        }
        @XmlAttribute
        public String getPassword() {
            return password;
        }
    
        @XmlAttribute
        public String getMobile() {
            return mobile;
        }
        @XmlAttribute
        public String getIdCard() {
            return idCard;
        }
    }
    
    • 响应
@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自动转换。

打完收工!

### Spring Boot 接收 XML 请求参数 为了实现Spring Boot应用程序能够接收并处理XML格式的请求数据,在项目中需引入特定依赖项以便支持这种功能[^3]。 对于希望让应用具备解析传入的XML文档能力的情况,应该向`pom.xml`文件添加如下所示的内容: ```xml <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> ``` 当涉及到定义用于映射HTTP POST请求体内的XML结构至Java类实例的过程时,可以利用JAXB注解来完成这一操作。下面给出了一段简单的代码片段作为例子展示如何创建一个控制器端点以接受来自客户端发送过来的XML消息,并将其转化为相应的实体对象[^4]。 #### 创建模型类 假设有一个名为`User`的数据传输对象(DTO),它代表了要通过API交换的信息单元之一,则该DTO可能看起来像这样: ```java import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="user") // 设置根元素名称为"user" public class User { private String name; private int age; public User() {} @XmlElement // 映射到XML中的子节点 public void setName(String name){ this.name = name; } @XmlElement public void setAge(int age){ this.age = age; } } ``` 上述代码里使用到了`@XmlRootElement`以及`@XmlElement`这两个来自于JAXB API 的标注,它们分别用来指定整个对象对应的顶级标签名和属性所关联的具体字段或getter/setter 方法。 #### 构建RESTful服务接口 接下来就是编写具体的Web层逻辑部分——即构建一个基于Spring MVC框架下的控制层组件,负责监听外部发起的目标URL路径上的POST方式调用事件;与此同时还要确保设置了正确的媒体类型(Content-Type)头信息为application/xml,从而告知服务器当前提交的数据是以XML的形式编码而成的。 ```java import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/users") public class UserController { @PostMapping(consumes= MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE) public User createUser(@RequestBody User user) { System.out.println("Received new user: " + user.getName()); return user; // 返回接收到的对象给前端查看效果 } } ``` 这段程序展示了怎样声明了一个新的资源路由规则,其中指定了仅允许消费(消耗)具有XML MIME类型的输入流,并且同样也设定了输出结果将以同样的形式呈现出来。此外还运用了`@RequestBody`注释把经过反序列化后的`User`实例注入到方法签名之中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻D开始

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值