RequestMapping注解中consumes与produces的区别
- 博客分类:
- spring boot
原文链接:https://www.iteye.com/blog/yxjajl-2410047
一直没搞懂RequestMapping中consumes和produces的区别
今天看了下源码,总结一下
说到这两个参数,不得不先回顾一下HTTP协议Header中的两个东西
ContentType 和Accept
在Request中
ContentType 用来告诉服务器当前发送的数据是什么格式
Accept 用来告诉服务器,客户端能认识哪些格式,最好返回这些格式中的其中一种
consumes 用来限制ContentType
produces 用来限制Accept
举例:
有个用户给我发了一个请求,
请求头中
ContentType =application/json
Accept = */*
就是说用户发送的json格式的数据,可以接收任意格式的数据返回
但是我的接口中定义了consumes={"application/xml"},produces={"application/xml"}
我只接收 application/xml 格式,也只返回xml格式
很明显,用户调不通这个接口
所以我改下consumes={"application/xml","application/json"},produces={"application/xml"}
注: 除了格式支持,还需要与数据对应的http转换器(HttpMessageConverter)此处先跳过
MediaType 其实就是 application/xml,application/json 等类型格式
大多数情况我们只需要返回json格式的字符串而不需要返回json对象,所以加上@Responsebody就行了。