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格式 如下: