springboot内容协商策略

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

 引入依赖

 
     com.fasterxml.jackson.dataformat
     jackson-dataformat-xml

可用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。调用它进行转化 。

基于请求头!!

springboot内容协商策略_第1张图片


基于参数的内容协商策略

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

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

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

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

基于参数!!

springboot内容协商策略_第2张图片

你可能感兴趣的:(springboot内容协商策略)