springboot内容协商

1.基于请求头 Accept: application/json
Accept: application/xml
Accept: application/xxx 自定义数据

发的请求头的数据类型 期望返回的数据类型

2.通过请求参数 例如 /football?format=json

一般@respondbody 默认以json方式进行返回

如何请求同一个接口,可以返回json和xml不同格式的数据

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

对应bean上
@JacksonXmlRootElement // 可以写出为xml文档

在这里插入图片描述

accept是*/*的情况
在这里插入图片描述

在这里插入图片描述
更改Accept 为application/xml

基于请求头(Accept) 默认开启
基于请求参数内容协商 需要开启
contentnegotiation:
favor-parameter: true
format=json根据format来返回参数值
parameter-name=type

根据type来返回

如何返回例如yaml格式的数据:
1.导入相关依赖

com.fasterxml.jackson.dataformat
jackson-dataformat-yaml

2.通过提供的YAMLFactory()放回
–YAMLGenerator.feature.WEITE_DOC_START_MARKER 不写文档 没有横线

3.告知springboot返回yaml格式
contentnegotiation:
media-types:
yaml: application/yaml
4.由于缺少yaml的HttpMessageConverter
1>.配置类重写
在这里插入图片描述
2>.增加一个实现类
在这里插入图片描述
这里super需要放在第一行
3.将这个yaml的类加入messageConverter中 在这里插入图片描述

内容协商原理简介:
一般controller上如果加了@ResponseBody 由HttpMessageConverter进行处理
1.遍历所有MessageConverter 看哪个支持请求内容类型的数据
2.找到了(比如 MappingJackson2HttpMessageConverter后(支持写出json)) jackson用ObjectMapper把对象写出去

常见问题:1.返回406 无法匹配需要的返回数据类型
在这里插入图片描述
配置为true

2.能接收到 返回为空白 后台报错
在这里插入图片描述
在这里插入图片描述
mapper未初始化
在这里插入图片描述
后返回yaml格式 如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值