我有以下控制器代码
@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可选的。我想要的是需要一些参数,如page
和size
,但其他参数如sort
可选。如果我将它们作为控制器参数,我可以使用@RequestParam(required = true/false)
。是否有可能在Java类中做类似的事情?
答案 0 :(得分:3)
您可以使用javax.validation API为类的字段指定一些约束
在您的情况下,您可以根据您的要求和字段类型使用var adminMode = { init: function() {
this.adminButton = document.getElementById('admin-button');
//this.adminForm = document.getElementById('admin-form');// form ID
//this.allForm = document.getElementById('all-form'); //div ID
this.adminButton.addEventListener('click', function (event) {
document.getElementById('admin-form').style.display = 'inline'
});
},
和@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
如果filter参数不遵守约束,则抛出import javax.validation.Valid;
...
@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(@Valid Filter filter) {
return ResponseEntity.ok(userService.findUsers(filter));
}
,您可以使用Spring异常处理程序(例如ConstraintViolationException
)将其留下或捕获以将其映射到特定客户端4XX错误。