[英]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可選的。 我想要的是有一些參數,如page
和size
需要,但其他像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.