在get请求中实现过滤器的最佳方法是什么?假设有一个方法可以获取id等于1的用户: /user?id=1 如果你需要处理很多类似的过滤器 /user? id=1&name=Sam&... 也不一定全部都会用到。实现处理的最佳方式是什么?
/user?id=1
/user? id=1&name=Sam&...
@GetMapping("/user") public String getUser(@RequestParam("name", required=false) String name) { // ... }
weylhg0b1#
如果遵循rest约定,则不会将标识符作为查询参数添加,而是作为路径参数添加( /users/1 )回到拥有多个查询参数,您有一些选择。一个是如您所述,具有多个requestparam,并带有required=false选项。
/users/1
@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 .
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) { // ... }
1条答案
按热度按时间weylhg0b1#
如果遵循rest约定,则不会将标识符作为查询参数添加,而是作为路径参数添加(
/users/1
)回到拥有多个查询参数,您有一些选择。
一个是如您所述,具有多个requestparam,并带有required=false选项。
另一个选择是使用java8
Optional
.但是,如果您有多个搜索选项,那么最好的方法是将get请求转换为post请求,在搜索对象中传递所有搜索选项。您可以在get请求中传递请求正文,但某些库/服务器可能会忽略它,因此不建议这样做。