繁体   English   中英

需要使用Spring java对象请求参数

[英]Make Spring java object request parameter required

我有以下控制器代码

@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(Filter filter) {
    return ResponseEntity.ok(userService.findUsers(filter));
}

Filter.java:

public class Filter {
    private Integer page;

    private Integer size;

    private String sort;

    ... lots of other parameters
}

请求参数被写为Java对象,以避免向控制器添加大量参数。 但是,所有参数都是Spring可选的。 我想要的是有一些参数,如pagesize需要,但其他像sort可选。 如果我将它们作为控制器参数,我可以使用@RequestParam(required = true/false) 是否有可能在Java类中做类似的事情?

您可以使用javax.validation API为类的字段指定一些约束。
在您的情况下,您可以根据您的要求和字段类型使用@NotNull@NotEmpty ,例如:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
...

public class Filter {

    @NotNull
    private Integer page;

    @NotEmpty
    private Integer size;

    private String sort;

    ... lots of other parameters
}

然后为要验证的参数指定@Valid注释:

import javax.validation.Valid;
...
@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(@Valid Filter filter) {
    return ResponseEntity.ok(userService.findUsers(filter));
}

如果filter参数不遵守约束,则抛出ConstraintViolationException ,您可以通过使用Spring异常处理程序(如@ControllerAdvice将其保留或捕获以将其映射到特定客户端4XX错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM