簡體   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