开发API的时候,读取请求参数是服务器端编码的常用操作,下面介绍一下几种请求常用的注解
@RequestParam
用来加载URL中?后面的参数
比如,请求接口/query?name=value1&code=value2
@GetMapping("/query")
@ResponseBody()
public DTO query(@RequestParam("name") String name, @RequestParam("code") String code){
return service.query(name, code);
}
@PathVariable
用来加载URL路径中的参数
比如,请求接口/query/123
@GetMapping("/query/{id}")
@ResponseBody()
public DTO query(@PathVariable("id") String id){
return service.query(id);
}
@SpringQueryMap
可以把Get请求的参数封装到一个对象里,当参数过多时比较方便
但是这个注解需要引用Spring Cloud OpenFeign的jar包才能使用
比如,请求接口/query?name=value1&code=value2
@GetMapping("/query")
@ResponseBody()
public DTO query(@SpringQueryMap QueryBO queryBO){
return service.query(queryBO);
}
@Data
public class QueryBO {
private String name;
private String code;
}
@MatrixVariable
这个一般用的不多,参数通过;分割
比如,/query;name=value1;code=value2;
@GetMapping("/query")
@ResponseBody()
public DTO query(@MatrixVariable String name, @MatrixVariable String code){
return service.query(name, code);
}
@RequestBody
用来加载POST请求的复杂请求体(payload)
@PostMapping("/query")
@ResponseBody()
public DTO query(@RequestBody QueryBO queryBO){
return service.query(queryBO);
}
@RequestHeader
用来加载请求头中的数据,一般在业务系统中不太使用,在基础设施里会比较常用
比如,把鉴权数据存在http请求头里
@GetMapping("/user")
@ResponseBody()
public List<UserDTO> getUserList(@RequestHeader("Authorization") String token) {
return service.findAll();
}
@CookieValue
当我们需要与客户端保持有状态的交互时,就需要用到Cookie
比如,服务端读取Cookie数据
@GetMapping("/user")
@ResponseBody()
public List<UserDTO> getUserList(@CookieValue(name = "SessionId") String sessionId) {
return service.findAll();
}