使 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对象,避免给controller增加很多参数。但是,Spring 将所有参数设为可选。我想要的是需要一些参数,如 page
和 size
,但其他参数如 sort
是可选的。如果我将它们作为控制器参数,我可以使用 @RequestParam(required = true/false)
。是否可以在 Java class 中做类似的事情?
您可以使用 javax.validation API 对 class 的字段指定一些约束。
在您的情况下,您可以根据您的要求和字段类型使用 @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));
}
如果过滤器参数不遵守约束,则会抛出一个 ConstraintViolationException
,您可以使用 Spring 异常处理程序将其保留或捕获以将其映射到特定的客户端 4XX 错误,例如作为 @ControllerAdvice
。
我有以下控制器代码
@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对象,避免给controller增加很多参数。但是,Spring 将所有参数设为可选。我想要的是需要一些参数,如 page
和 size
,但其他参数如 sort
是可选的。如果我将它们作为控制器参数,我可以使用 @RequestParam(required = true/false)
。是否可以在 Java class 中做类似的事情?
您可以使用 javax.validation API 对 class 的字段指定一些约束。
在您的情况下,您可以根据您的要求和字段类型使用 @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));
}
如果过滤器参数不遵守约束,则会抛出一个 ConstraintViolationException
,您可以使用 Spring 异常处理程序将其保留或捕获以将其映射到特定的客户端 4XX 错误,例如作为 @ControllerAdvice
。