springboot内容协商策略

根据客户端接收能力不同,返回不同媒体类型的数据。

 引入依赖

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

可用Postman软件分别测试返回json和xml:只需要改变请求头中Accept字段(application/json、application/xml)。

Http协议中规定的,Accept字段告诉服务器本客户端可以接收的数据类型。


内容协商原理:

    1、判断当前响应头中是否已经有确定的媒体类型MediaType。
    2、获取客户端(PostMan、浏览器)支持接收的内容类型。(获取客户端Accept请求头字段application/xml)
        ①contentNegotiationManager 内容协商管理器 默认使用基于请求头的策略
        ② HeaderContentNegotiationStrategy 确定客户端可以接收的内容类型
    3、遍历循环所有当前系统的 MessageConverter,看谁支持操作这个对象(Person)
    4、找到支持操作Person的converter,把converter支持的媒体类型统计出来。
    5、客户端需要application/xml,服务端有10种MediaType。
    6、进行内容协商的最佳匹配媒体类型
    7、用 支持 将对象转为 最佳匹配媒体类型 的converter。调用它进行转化 。

基于请求头!!


基于参数的内容协商策略

获取客户端(PostMan、浏览器)支持接收的内容类型。(获取客户端Accept请求头字段application/xml)

  • contentNegotiationManager 内容协商管理器 默认使用基于请求头的策略
  • HeaderContentNegotiationStrategy 确定客户端可以接收的内容类型

yml中配置:开启内容协商功能

spring:
    contentnegotiation:
      favor-parameter: true #开启基于参数的内容协商功能
                            #localhost:8080/test/person?format=json (浏览器通过format定制发送内容的格式)

基于参数!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值