get请求中的java过滤器

zvms9eto  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(396)

在get请求中实现过滤器的最佳方法是什么?
假设有一个方法可以获取id等于1的用户: /user?id=1 如果你需要处理很多类似的过滤器 /user? id=1&name=Sam&... 也不一定全部都会用到。实现处理的最佳方式是什么?

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

weylhg0b1#

如果遵循rest约定,则不会将标识符作为查询参数添加,而是作为路径参数添加( /users/1 )
回到拥有多个查询参数,您有一些选择。
一个是如您所述,具有多个requestparam,并带有required=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) {
    // ...
}

另一个选择是使用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) {
    // ...
}

相关问题