Spring Boot拓展XML格式的请求和响应操作过程

 更新时间:2023年10月27日 10:19:45   作者:Miaow.Y.Hu  
在我们开发过程中,我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理,但是我们在实际开发过程中,我们可能经历一些,比如对于XML格式的请求,本文给大家介绍Spring Boot拓展XML格式的请求和响应,感兴趣的朋友一起看看吧

在我们开发过程中,我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理,但是我们在实际开发过程中,我们可能经历一些,比如对于XML格式的请求,我们在后端应该如何接收,并且如何将XML格式的参数变成对象,然后返回一个XML对象呢?

实现原理

我们在处理XML格式的数据的时候,需要知道我们最初学习Spring系列中的Spring MVC。因为在Spring MVC中我们有一个消息转换器的概念,其主要负责处理不同格式的请求数据进行处理,然后将这个数据包装成为对象,以便提供更加友好的变成体验。

我们研究Spring MVC的源码可以得到在Spring MVC中定义了一个HttpMessageCoverter接口,抽象了消息转换器对类型的判断,对读写的判断与操作,具体如下:

public interface HttpMessageConverter<T> {
    boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
    boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
    List<MediaType> getSupportedMediaTypes();
    T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
    void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}
  • boolean canRead(Class<?> clazz, @Nullable MediaType mediaType):判断给定的类和媒体类型是否可以被读取。在处理请求时,用于判断是否可以将请求的消息体转换为指定的类对象。
  • boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType):判断给定的类和媒体类型是否可以被写入。在处理响应时,用于判断是否可以将指定的类对象转换为响应的消息体。
  • List<MediaType> getSupportedMediaTypes():获取该消息转换器支持的媒体类型列表。这些媒体类型表示该转换器可以读取或写入的数据格式。
  • - Tread(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException:将请求的消息体转换为指定的类对象。该方法从 HttpInputMessage 中读取请求的数据,并将其转换为指定的类对象。
  • void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException:将指定的类对象转换为响应的消息体。该方法将指定的类对象转换为字节流,并写入到 HttpOutputMessage 中作为响应的数据。

我们知道,在HTTP中,Content-Type中有各种不同的格式定义,如果需要支持XML格式的消息转换,那就的使用对应的转换器,并且我们知道在Spring MVC中默认已经有一套采用Jackson实现的转换器MappingJackson2XmlHttpMessageConverter

拓展实现

1. 引入XML消息转换器

如果你是Spring 用户,并非Spring Boot用户,那么我们可以引入XML消息转换器。

@Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
        builder.indentOutput(true);
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
    }
}

如果你是Spring Boot用户,那么就直接加入相关依赖就行了,那么相关依赖就交于Spring Boot自动实现了:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2. 定义对象与XML的关系

做好了基础配置后,就可以定义XML内容对应的Java对象了:

@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "User")
public class User {

    @JacksonXmlProperty(localName = "name")
    private String name;
    @JacksonXmlProperty(localName = "age")
    private Integer age;

}

其中:@Data@NoArgsConstructor@AllArgsConstructor是lombok简化代码的注解,主要用于生成get、set以及构造函数。@JacksonXmlRootElement@JacksonXmlProperty注解是用来维护对象属性在xml中的对应关系。

上述配置的User对象,其可以映射的Xml样例如下(后续可以使用上述xml来请求接口):

<User>
    <name>miaow</name>
    <age>4</age>
</User>

3.创建一个接收xml请求的接口

完成了需要转换的对象之后,我们可以编写一个相关接口来接受XML并返回xml。

@Controller
public class UserController {
    @PostMapping(value = "/user",
            consumes = MediaType.APPLICATION_XML_VALUE,
            produces = MediaType.APPLICATION_XML_VALUE)
    @ResponseBody
    public User create(@RequestBody User user) {
        user.setName("姓名 : " + user.getName());
        user.setAge(user.getAge() + 20);
        return user;
    }
}

启动项目之后,我们可以通过相关接口工具进行请求发送,例如:

我采用的事ApiFox这个软件,如果你有更好的软件可以选择您自己的软件

到此这篇关于Spring Boot拓展XML格式的请求和响应的文章就介绍到这了,更多相关Spring Boot XML请求和响应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中集成日志的四种方式

    SpringBoot中集成日志的四种方式

    在开发中,日志记录是保障应用程序健壮性、可维护性的重要手段,通过日志,我们可以记录系统的运行状态、捕获异常并进行调试,Spring Boot 默认使用的是 Logback,但你也可以根据需求选择其他框架,以下是几种常用的日志集成方法,需要的朋友可以参考下
    2024-10-10
  • Springboot接收Get参数实践过程

    Springboot接收Get参数实践过程

    本文主要介绍了在Spring Boot中如何接收不同类型的请求参数,包括在路径中直接传递参数、跟在问号后面传递参数、使用Map接收参数、接收数组以及使用对象接收参数等方法
    2024-12-12
  • Java使用ANTLR4对Lua脚本语法校验详解

    Java使用ANTLR4对Lua脚本语法校验详解

    ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本语法校验吧
    2025-04-04
  • java针对于时间转换的DateUtils工具类

    java针对于时间转换的DateUtils工具类

    这篇文章主要为大家详细介绍了java针对于时间转换的DateUtils工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • CentOS7环境下安装JDK 1.8及解决wget命令缺失问题的办法

    CentOS7环境下安装JDK 1.8及解决wget命令缺失问题的办法

    在CentOS 7中wget命令是一个非常实用的工具,用于从互联网下载文件,然而默认情况下,wget可能未安装,这篇文章主要介绍了CentOS7环境下安装JDK 1.8及解决wget命令缺失问题的相关资料,需要的朋友可以参考下
    2025-10-10
  • JAVA超级简单的爬虫实例讲解

    JAVA超级简单的爬虫实例讲解

    下面小编就为大家带来一篇JAVA超级简单的爬虫实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • JDK1.8、JDK1.7、JDK1.6区别看这里

    JDK1.8、JDK1.7、JDK1.6区别看这里

    这篇文章主要为大家详细介绍了JDK1.8、JDK1.7、JDK1.6中的源码,对比阅读,发现修改问题以及改进点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C# 数据类型转换

    C# 数据类型转换

    这篇文章主要讲解C语言中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。希望能够给你带来帮助
    2021-07-07
  • 解决springboot依赖包中报错unknown的问题

    解决springboot依赖包中报错unknown的问题

    这篇文章主要介绍了解决springboot依赖包中报错unknown的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • IE8+SpringMVC文件上传防止JSON下载

    IE8+SpringMVC文件上传防止JSON下载

    这篇文章主要介绍了IE8+SpringMVC文件上传防止JSON下载的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论