目录
一、基于请求头的内容协商机制
如果我们的Java服务为浏览器和安卓手机同时提供服务,浏览器期望接受的请求是JSON格式,安卓客户端期望接收的请求是XML格式,这个时候是否需要写两个方法?
不需要!SpringBoot的内容协商机制可以解决这个问题。
- 内容协商机制:根据客户端接收能力不同,SpringBoot 返回不同媒体类型的数据。
Spring默认支持内容协商机制,但SpringBoot默认只支持返回Json数据,所以需要导入
jackson-dataformat-xml
让SpringBoot支持返回xml数据
引入依赖
html
<!-- 引入支持返回 xml 数据格式 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.5</version>
</dependency>
编写控制器
java
@Controller
@RequestMapping("/user")
public class MyController1 {
@Autowired
private UserMapper userMapper;
@RequestMapping("/findById")
@ResponseBody
public user findById(Integer id){
return userMapper.findById(id);
}
}
postman进行测试
默认情况下,支持返回的是json格式,修改的在要在请求头中的Accept值修改为application/xml
默认
修改为xml数据格式
二、基于请求参数的内容协商机制
SpringBoot默认情况下是根据请求头不同,返回不同的数据格式。同时我们也可以配置基于请求参数的内容协商,也就是请求参数值的不同,返回不同的数据。
在配置文件中开启基于参数的内容协商机制
php
spring:
#开启请求参数的内容协商机制
mvc:
contentnegotiation:
#开启基于参数的内容协商机制
favor-parameter: true
#给这个键起名字,这个键的值就是xml,json那些数据格式
parameter-name: format