亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何驗證 List 類型的@RequestParam的大小

如何驗證 List 類型的@RequestParam的大小

至尊寶的傳說 2022-09-07 16:55:51
我正在創建一個 Spring-Boot 微服務 REST API,該 API 的類型為 .如何驗證列表是否包含最小值和最大值?@RequestParamList<String>到目前為止,我已經嘗試使用應該支持集合的功能()。@Size(min=1, max=2)javax.validation.constraints.Size我還嘗試添加參數和注釋,但沒有成功。@ValidBindingResult@Size我更喜歡使用類似于第一個示例的解決方案,該解決方案更緊湊,更整潔。這是針對Spring-Boot 2.1.2.RELEASE的。@Size(min=1, max=2)@RestControllerpublic class MyApi {    @GetMapping(value = "/myApi", produces = { APPLICATION_JSON_VALUE })    public ResponseEntity<List<MyObject>> getSomething(@Valid @RequestParam(value = "programEndTime", required = false) @Size(min = 1, max = 2) List<String> programEndTime, BindingResult result) {        if (result.hasErrors()) {            System.out.println("Error");        } else {            System.out.println("OK");        }    }}我希望能夠到達該行,但實際上它被跳過了。System.out.println("Error")
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

如果使用方法參數驗證,則應使用 對控制器進行批注,如文檔所述:@Validated


要獲得 Spring 驅動方法驗證的資格,所有目標類都需要使用 Spring 的注釋進行注釋。((可選)還可以聲明要使用的驗證組。有關 Hibernate Validator 和 Bean Validation 1.1 提供程序的設置詳細信息,請參閱 javadoc。@ValidatedMethodValidationPostProcessor


這意味著您應該將代碼更改為:


@Validated // Add this

@RestController

public class MyApi {

    // ...

}

之后,如果驗證不匹配,它將拋出一個。ContraintViolationException


但請注意,由于您只有注釋,因此如果您不提供 ,則集合將是,并且該集合也將有效。如果不希望這樣做,則還應添加批注,或從 中刪除值。@Size()programEndTimenull@NotNullrequired = false@RequestParam


不能使用 though 來檢索錯誤,因為這僅適用于模型屬性或請求正文。您可以做的是為 定義一個異常處理程序:BindingResultConstraintViolationException


@ExceptionHandler(ConstraintViolationException.class)

public void handleConstraint(ConstraintViolationException ex) {

    System.out.println("Error");

}


查看完整回答
反對 回復 2022-09-07
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

根據 Bean Validator 2.0、Hibernate Validator 6.x,您可以直接在參數化類型上使用約束。


@GetMapping(path = "/myApi", produces = { APPLICATION_JSON_VALUE })

public ResponseEntity<List<MyObject>> getSomething(@RequestParam(value = "programEndTime", required = false) List<@Size(min = 1, max = 2) String> programEndTimes)

有關詳細信息,請查看容器元素約束。


查看完整回答
反對 回復 2022-09-07
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

您可以使用類和@RequestBody進行參數驗證,這像我一樣成功。


public class Test {

    @Size(min = 1 , max = 5)

    private List<String> programEndTime;


    public List<String> getProgramEndTime() {

        return programEndTime;

    }


    public void setProgramEndTime(List<String> programEndTime) {

        this.programEndTime = programEndTime;

    }

}

    @PostMapping("test")

    public void test( @Valid   @RequestBody Test test,

                     BindingResult result){

        if (result.hasErrors()) {

            System.out.println("Error");

        } else {

            System.out.println("OK");

        }

        System.out.println(",.,.");

    }


查看完整回答
反對 回復 2022-09-07
  • 3 回答
  • 0 關注
  • 297 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號