在GET请求中实现过滤器的最佳方式是什么?
假设有一个方法可以获取id等于1的用户:/user?id=1
如果您需要处理大量类似的过滤器,则将使用/user? id=1&name=Sam&...,而不是所有过滤器。实现处理的最佳方式是什么?
@GetMapping("/user")
public String getUser(@RequestParam("name", required=false) String name) {
// ...
}发布于 2021-02-20 02:45:49
如果遵循REST约定,则不会将标识符作为查询参数添加,而是作为路径参数添加。(/users/1)
回到拥有多个查询参数的问题,您有一些选择。
一种是如您所述,使用required=false选项拥有多个RequestParams。
@GetMapping("/user")
public String getUser(@RequestParam(required=false) String firstName,
@RequestParam(required=false) String lastName,
@RequestParam(required=false) String nickName,
@RequestParam(required=false) String mail,
@RequestParam(required=false) String sex) {
// ...
}另一种选择是使用Java8 Optional。
@GetMapping("/user")
public String getUser(@RequestParam Optional<String> String firstName,
@RequestParam Optional<String> String lastName,
@RequestParam Optional<String> String nickName,
@RequestParam Optional<String> String mail,
@RequestParam Optional<String> String sex) {
// ...
}但总而言之,如果您有多个搜索选项,最好的方法是将GET请求转换为POST请求,在一个搜索对象中传递所有搜索选项。您可以在GET请求中传递请求正文,但它可能会被某些库/服务器忽略,因此不建议这样做。
@PostMapping
public String getUser(@RequestBody UserSearchRequest searchRequest) {
// ...
}https://stackoverflow.com/questions/66283199
复制相似问题