【SpringBoot WEB 系列】xml 传参与返回使用姿势-腾讯云开发者社区-腾讯云

在Spring MVC中,如果你想将XML数据解析为对象,你可以使用类似于@RequestBody的机制,通过Spring提供的消息转换器(Message Converter)来实现自动将XML数据转换为Java对象。具体实现方法如下:

1. 启用对XML的支持

Spring MVC 默认支持 JSON 数据的自动转换,但对 XML 的支持通常需要额外配置。Spring 使用 HttpMessageConverter 来实现请求和响应的内容转换,其中 MappingJackson2HttpMessageConverter 用于JSON,而 Jaxb2RootElementHttpMessageConverterMarshallingHttpMessageConverter 用于 XML。

2. 配置XML解析

为了支持XML,首先你需要在Spring的配置中启用对XML的支持。如果你使用的是Spring Boot,Spring会自动根据依赖配置相关的消息转换器。但是在Spring MVC中,你可能需要手动配置。

可以通过以下两种方式实现:

(1)引入XML解析相关依赖

如果你使用的是Spring Boot,并且希望支持XML解析,你需要引入依赖,例如:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

如果你使用的是Spring MVC传统项目,可能需要添加以下依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

(2)配置消息转换器

在Spring MVC配置类中,重写configureMessageConverters方法,加入对XML的支持:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 添加XML的消息转换器
        converters.add(new Jaxb2RootElementHttpMessageConverter());
    }
}

3. 使用@RequestBody处理XML数据

当你配置好消息转换器后,你可以像处理JSON数据一样,使用@RequestBody来处理XML数据。例如,有一个类:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
    private String name;
    private int age;

    // Getters and setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

然后你可以创建一个接收XML的Controller方法:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping(value = "/create", consumes = "application/xml", produces = "application/xml")
    public User createUser(@RequestBody User user) {
        // 处理逻辑
        return user;
    }
}