在GET请求中过滤



在GET请求中实现过滤器的最佳方式是什么?

假设有一个方法获取id等于1的用户:/user?id=1

如果你需要处理很多类似的过滤器,/user? id=1&name=Sam&...不一定都将被使用。实现处理的最佳方式是什么?

@GetMapping("/user")
public String getUser(@RequestParam("name", required=false) String name) {
// ...
}

如果遵循REST约定,则不将标识符作为查询参数添加,而是作为路径参数添加。(/users/1)

回到有多个查询参数,你有一些选择。

一个是如您所述,具有多个RequestParams和所需的=false选项。

@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) {
// ...
}

另一个选择是使用Java8Optional

@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) {
// ...
}

最新更新