请求头当中的 Accept 属性的值所决定的。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
而这里之以是显示的 JSON 格式的数据,是因为在我们pom.xml 文件中导入的 spring boot 依赖当中包含了 json 数据格式的 jar 依赖。复制代码
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
- xml 为 0.9 优先级更高
- */*(其它的数据类型,包括 json格式的字符) 为 0.8 稍微低一点。
而没有 xml 的数据格式的 jar 依赖,自然就是优先为 json 你有的数据格式的jar依赖为准了。
我们可以 Debug 看看。
我们在 AbstractJackson2HttpMessageConverter.java 类当中的 writeInternal() 的方法当中打上 断点。
直到走到这里,我们查看 generator的值:发现是 JSON。这就没错了,我们仅仅是spring boot 框架种自行设置了 json 数据格式的依赖,而没有其它的数据格式的依赖,自然就利用我们有的数据格式的了。下面我们导入xml 数据格式的依赖,再进行一个测试 。
留意:参数format是规定好的,在开启请求参数的内容协商功能后,SpringBoot底层 ParameterContentNegotiationStrategy 会通过 format 来接收参数,然后返回对应的媒体类型/数据格式,当然format=xxx,这个xxx媒体类型/数据格式是SpringBoot可以
处理的才行,不能乱写。 也留意是英文的 ?
实在这个 format 的值是:ParameterContentNegotiationStrategy 类当中的 parameterName 属性值。
这个我们也可以修改这个值,指定一个内容协商的参数名,就不再是默认的 format而是我们本身定义的一个参数名了。
照旧在 application.yaml 文件当中设置,增加上一个属性。
这里我们指定**内容协商的参数名为,rainbowsea 。
重新启动程序,浏览器运行测试:复制代码
- spring:
- mvc:
- contentnegotiation:
- favor-parameter: true # 开启基于请求参数的内容协商功能
- #?format=json parameter-name: rainbowsea # 指定一个内容协商的参数名,就不再是默认的 format而是 # ?rainbowsea=json ,默认的失效了
需要留意的是: 我们本身指定一个内容协商的参数名,修改掉了默认的 format 的参数了,就不再是默认的 format而是,rainbowsea=json ,默认的(format 就不可以再用了,已经失效了)失效了。
默认的 format 已经失效了, 无论我们设置=json,照旧 xml ,都返回的是 xml 格式类型的数据5. 总结:
。因为 xml 优先级是0.9 比较高的,以是返回的就是默认优先级高的 xml 的格式的了。
“在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |