Spring Boot中扩展XML请求和响应的支持详解编程语言
2023-06-13 09:11:43 时间
在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理。那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一个对象呢?
实现原理:消息转换器(Message Converter)
在扩展上述问题之前,我们先要知道Spring Boot中处理HTTP请求的实现是采用的Spring MVC。而在Spring MVC中有一个消息转换器这个概念,它主要负责处理各种不同格式的请求数据进行处理,并包转换成对象,以提供更好的编程体验。
在Spring MVC中定义了HttpMessageConverter接口,抽象了消息转换器对类型的判断、对读写的判断与操作,具体可见如下定义:
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; }
众所周知,HTTP请求的Content-Type有各种不同格式定义,如果要支持Xml格式的消息转换,就必须要使用对应的转换器。Spring MVC中默认已经有一套采用Jackson实现的转换器MappingJackson2XmlHttpMessageConverter。
扩展实现
@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应用不用像上面这么麻烦,只需要加入jackson-dataformat-xml依赖,Spring Boot就会自动引入MappingJackson2XmlHttpMessageConverter的实现:
dependency groupId com.fasterxml.jackson.dataformat /groupId artifactId jackson-dataformat-xml /artifactId /dependency
同时,为了配置Xml数据与维护对象属性的关系所要使用的注解也在上述依赖中,所以这个依赖也是必须的。
consumes =MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE @ResponseBody public User create(@RequestBody User user) { user.setName("didispace.com : "+ user.getName()); user.setAge(user.getAge() + 100); return user; }
最后,启动Spring Boot应用,通过POSTMAN等请求工具,尝试一下这个接口,可以看到请求Xml,并且返回了经过处理后的Xml内容。
16527.html
cjavaxml相关文章
- 【01】Spring源码-手写篇-手写IoC实现
- 玩转 Spring Boot 原理篇(核心注解知多少)(十)
- spring boot自动配置原理面试题_Spring boot面试
- Spring Boot+Vue开发实战_有关理解的图片带字
- Spring Boot 实现接口幂等性的 4 种方案
- Spring入门
- 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
- Spring之AOP的切点、通知、切点表达式以及知识要点
- redis 配置密码验证_spring redis配置
- 一个用来深度学习并实战 Spring Boot 的项目,共 66 个集成demo
- 中高级程序员可能都不会使用spring-boot-starter-jdbc访问MySQL
- Spring Boot + Vue + Shiro 实现前后端分离,写得太好了!
- Spring boot串口通信,windows、linux,docker环境配置说明
- 「纯手打」2万字长文从0开始Spring Boot(上)
- [Redis]Spring Boot中Redis Template集群配置
- 实战!3分钟搞定Spring Boot 多环境配置
- Spring Boot 监听 Redis Key 失效事件实现定时任务
- Spring Boot的ORM框架使用(一)
- Spring Boot的日志管理
- 如何使用 Arthas 定位 Spring Boot 接口超时
- spring boot集成redis基础入门实例详解
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- Spring Boot(十三):spring boot小技巧详解编程语言
- spring boot集成mybatis 自动生成实体类和mapper文件、Dao层详解编程语言
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- Spring Boot 2.0 的快速入门(图文教程)