java 在GetMapping注解中使用params属性的目的是什么?

isr3a4wc  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(431)

我用 Spring Boot 3
我不明白两者的区别

@GetMapping(value="/{id}", params="name")
public ResponseEntity<List<PersonPayload>> findPerson(@PathVariable Long id, @RequestParam String name){
   ...
}

@GetMapping(value="/{id}", params="name")
public ResponseEntity<List<PersonPayload>> findPerson(@PathVariable Long id, @RequestParam("name") String name){
   ...
}

在getMapping中使用params属性,和使用requestParam是一样的吗?

lp0sw83n

lp0sw83n1#

从作为RequestMapping.params()别名的文档
Map请求的参数,缩小主Map。
适用于任何环境的相同格式:一个“myParam=myValue”样式表达式的序列,**只有当发现每个此类参数具有给定值时,才Map请求。**表达式可以通过使用“!=”运算符求反,如“myParam!=myValue”。也支持“myParam”样式表达式,**此类参数必须存在于请求中(允许有任何值)。**最后,“!myParam”样式表达式表示指定的参数不应该出现在请求中。
例如,假设我们有一个用GetMappings注解并用params指定的方法

@GetMapping(value="/{id}", params="name")
public ResponseEntity<List<PersonPayload>> findPerson(@PathVariable Long id, @RequestParam String name){
 ...

}

然后,将name作为查询参数的GET请求将Map到方法findPerson

GET - http://localhost:8080/1?name=robert

如果请求参数name不存在,则会抛出以下错误

GET - http://localhost:8080/1

Resolved [org.springframework.web.bind.UnsatisfiedServletRequestParameterException: Parameter conditions "name" not met for actual request parameters:

@RequestParam(“name”)中提供的值是将带有name值的查询参数绑定到变量

@GetMapping(value="/{id}")
public ResponseEntity<List<PersonPayload>> findPerson(@PathVariable Long id, @RequestParam("name") String name){
 ...
}

另一个优点是,我们可以遵循java命名约定的变量,如果查询参数有任何符号或_

@GetMapping(value="/{id}")
public ResponseEntity<List<PersonPayload>> findPerson(@PathVariable Long id, @RequestParam("first_name") String firstName){
 ...
}

相关问题