springboot数据响应请求之内容协商

根据客户端接收能力不同、返回不同媒体类型的数据
导包:

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

使用postman测试返回json或xml
在这里插入图片描述
只需要改变请求头中的Accept字段,Http协议中规定的,告诉服务器本客户端可以接收的数据类型

开启浏览器参数内容协商功能

浏览器写请求头自定义为json或xml
在application.yml文件中

spring: 
	mvc: 
		contentnegotiation: 
			favor-parameter: true(默认为false)

然后在请求中使用format=(json或者是xml或其他)既可
在这里插入图片描述
在这里插入图片描述
确定客户端接收什么样的内容类型
Parameter策略优先确定是返回json数据(获取请求头中的format值)
在这里插入图片描述
原理:

1、判断当前响应头中是否已经有确定的媒体类型,MediaType
2、获取客户端(postman、浏览器)支持的内容类型(获取客户端Accept请求头字段) [application/xml]
3、contentNegotiationManager内容协商管理器,默认使用基于请求头的策略,默认只有一个策略
在这里插入图片描述
调用HeaderContentNegotiationStrategy来确定客户端可以接收的内容类型
在这里插入图片描述
··遍历循环所有当前系统的MessageConverter,看谁支持操作这个对象
··找到支持操作的Converter,把converter支持的媒体类型统计出来
··客户端需要[application/xml],服务端能力[10种\json\xml]

在这里插入图片描述
····进行内容协商的最佳匹配
····用支持 将对象转为最佳匹配媒体类型的converter,调用它进行转换

在这里插入图片描述
后四个支持把对象转为json/xml

自定义MessageConverter

1、@ResponseBody响应数据出去,调用RequestResponseBodyMethodProcessor处理
2、Processor处理方法返回值。通过MessageConverter处理
3、所有的MessageConverter合起来可以支持各种媒体类型数据的操作(读写)
4、内容协商找到最终的messageConverter
步骤:
1、添加自定义的MessageConverter进系统底层
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后在WebMvcConfigurer中添加进去
在这里插入图片描述
2、系统底层就会统计出所有MessageConverter能操作哪些类型
3、客户端内容协商[xxx – > xxx]

Springmvc的什么功能,一个入口给容器中添加一个WebMvcConfigurer,在里面改任何springmvc的配置都可以生效。

以format自定义参数进行内容协商
默认只有2种
在这里插入图片描述
在WebMvcConfigurer自定义一个内容协商策略
在这里插入图片描述

可以给format改名字
在这里插入图片描述

在这里插入图片描述
有可能我们添加的自定义的功能会覆盖默认的很多功能,导致一些默认的功能失效

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值