介绍:
Spring @RequestParam批注可用于在处理程序方法中提取查询参数。 在本快速教程中,我们将学习其用法。
首先让我们展示一个API,该API返回具有给定名字和年龄的用户列表:
@RestController
public class UserController {...@GetMapping("/users")public List<User> getUsers(@RequestParam String firstName, @RequestParam int age) {return userService.findUsersWith(firstName, age);}
}
现在,让我们使用cURL快速测试一下:
curl -XGET 'http://localhost:8080/users?firstName=John&age=15'
...
[{firstName = John ,lastName = Mason ,age = 15}, {firstName = John ,lastName = Dash ,age = 15}]
如我们所见, firstName和age是正确映射到我们的处理程序方法的查询参数。
@RequestParam批注支持使用多种属性来满足各种常见需求:
1.
在刚刚介绍的示例中,我们将注意到方法参数和查询参数的名称相同( firstName和age )。
但是, 有时,我们可能会觉得需要使用不同的名称。 为此,我们将使用其name或value属性 :
@GetMapping("/users")
public List<User> getUsers(@RequestParam(name="uName") String firstName, @RequestParam("uAge") int age) {return userService.findUsersWith(firstName, age);
}
这样,UNAME和uAge参数将分别映射到firstName和年龄的方法参数:
curl -XGET 'http://localhost:8080/users?uName=John&uAge=15'
2.
默认情况下, 如果我们定义了一个请求参数,并且未在用户请求中传递它,则会收到错误消息。
为了避免这种情况,我们可以将required设置为false:
@GetMapping("/users")
public List<User> getUsers(@RequestParam(required=false) String firstName, @RequestParam int age) {return userService.findUsersWith(firstName, age);
}
它将为所有可选参数分配默认数据类型。 当我们点击以下URL时:
http://localhost:8080/users?age=15
firstName将被映射为空值。
3.
如果我们想要将required设置为false并且还将默认值映射到所关注的属性,我们将具有:
@GetMapping("/users")
public List<User> getUsers(@RequestParam(defaultValue="John") String firstName,@RequestParam int age) { return userService.findUsersWith(firstName, age);
}
在这里,如果我们不传递firstName查询参数,它将假定它是'John' 。
我们可以在Java 列表中接受查询参数的列表:
@GetMapping("/users/v2")
public List<User> getUsersWithGivenAges(@RequestParam List<Integer> age) {return userService.findUsersWithAges(age);
}
要使用我们的新用户API,我们将提供以下内容:
curl -XGET 'http://localhost:8080/users/v2?age=10,15,20'Orcurl -XGET 'http://localhost:8080/users/v2?age=10&age=15&age=20'
检索所有参数:
要从用户请求中检索所有传递的查询参数,我们将其接受为Java Map :
@GetMapping("/paramsEx")
public Map<String, String> printParams(@RequestParam Map<String, String> allQueryParams) {System.out.println(allQueryParams); return allQueryParams;
}
当我们想检索所有参数而不知道它们的名称时,这很方便:
curl -XGET 'http://localhost:8080/paramsEx?param1=A¶m2=B¶m3=2'
...
{param1=A, param2=B, param3=2}
结论:
在本教程中,我们学习了如何在Spring应用程序中使用@RequestParam批注。
翻译自: https://www.javacodegeeks.com/2019/10/spring-requestparam-annotation.html