springboot自适应json和xml的原理以及请求响应过程

正常来说springboot的默认response的返回类型都是以json的形式,这几天主管让我看看能不能兼容一下xml。
于是我在pom.xml下加入了对解析成xml的支持。


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

本来我以为要根据客户端的请求的不同的header的Accept来做不同的解析(xml或者json)

结果很神奇,只要加了以上依赖依旧,而我什么都没做,只要访问接口的同时,加上Accept=application/xml,结果就已经是处理好的xml数据了。
springbootf返回 xml
springboot返回 json

感觉有点神奇,也太厉害了,于是翻阅了一下源码,看看springboot是怎么做了处理的。

我把过程大致的分为两部分。
1、Springboot加入对xml的支持。
2、请求的时候带上xml的Accept的请求流程解析过程。

1、Springboot加入对xml的支持。

先看看WebMvcConfigurationSupport.java
springboot检测到了XmlMapper类的存在,所以给jackson2XmlPresent设置为true。在这里插入图片描述

addDefaultHttpMessageConverters()方法
由于jackson2XmlPresent为true,所以这里会添加对xml的支持。
在这里插入图片描述
在这里插入图片描述
以上算是加上了xml的支持了。

2、请求的时候带上xml的Accept的请求流程解析过程。

接下来我们来走一个请求的流程。

打开postman,输入请求接口以及Accept的值。
在这里插入图片描述
请求流程进入到DispatcherServlet.class和doService()方法下,再进入到doDispatch()

在这里插入图片描述
doDispatch()方法里有一个handle()方法,他可以根据映射找到对应的controller。
在这里插入图片描述

handle()是接口下HandlerAdapter下的一个方法,我们找到他的实现类AbstractHandlerMethodAdapter.class。
在这里插入图片描述
在通过实现类的handle()方法里发现了他调用的handleInternal()
在这里插入图片描述

在这里插入图片描述
找到子类RequestMappingHandlerAdapter.class, 查看具体的实现
在这里插入图片描述

invokeHandlerMethod()方法
在这里插入图片描述

invokeAndHandle()方法,这里以及拿到了返回的结果

在这里插入图片描述
下面有一句handleReturnValue()方法 处理返回的结果
在这里插入图片描述
在这里插入图片描述
这里进入RequestResponseBodyMethodProcessor.class的handleReturnValue方法
在这里插入图片描述

在这里插入图片描述
找到客户端需要的accept格式,在对现在支持的格式做循环,发现双发匹配即可用相应的转换器处理结果,如果没有找到,抛出异常。
这里我就截了大概的流程,具体的细节代码,大家可以打着断点走一走。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot自适应功能是指它可以根据项目的环境自动适配和配置。它可以根据你的项目依赖和配置文件,智能地自动配置应用程序的各种组件和功能。 Spring Boot自适应功能主要体现在以下几个方面: 1. 自动配置:Spring Boot 会根据你的项目依赖和配置文件来自动配置应用程序的各种组件,比如数据源、Web 服务器、数据访问、安全性等。你只需要添加相应的依赖,并进行简单的配置,Spring Boot 会根据相关规则自动完成配置,省去了手动配置的繁琐过程。 2. 自动装配:Spring Boot 提供了一种叫做条件装配(Conditional Configuration)的机制,在加载组件时根据条件来确定是否需要进行装配。例如,如果你的项目中引入了数据库相关的依赖,Spring Boot 会自动根据依赖的类型和配置文件中的参数来装配对应的数据源。 3. 自动扫描:Spring Boot 可以自动扫描和加载项目中的各种组件,无需手动配置。通过使用注解(如@ComponentScan)标记要扫描的包或类,Spring Boot 可以在启动时自动加载并注册这些组件。 4. 自动刷新:Spring Boot 支持热部署和自动刷新,即在开发过程中修改代码后,无需重新启动应用程序,就可以立即看到变化。这大大提高了开发效率。 通过这些自适应功能,Spring Boot 让开发者能够更加专注于业务逻辑的实现,而无需过多关注底层的配置和装配。同时,它也提供了灵活的配置选项,可以根据项目的需求进行自定义扩展和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值