簡體   English   中英

多個@RequestParam的Spring驗證

[英]Spring Validation for multiple @RequestParam

假設我有一個@GetMapping的RestController,如下所示

ResponseEntity<?> getXXX(
@RequestParam(value = "param1", required = true) String param1,
@RequestParam(value = "param2", required = true) String param1)

如果使用者對此API執行@Get而不使用param1 param2,則Spring會拋出“ MissingServletRequestParameterException”,但針對param1而非param2

我在這里的問題是,如果消費者沒有通過這兩個參數1和參數,我們可以某種方式得到MissingServletRequestParameterException 兩個參數1和參數?

請告訴我

首先,由於您已在作用域內重新聲明了變量,因此無法編譯此代碼。 而且,如果我正確理解了這個問題,如果您重構給定的代碼段(以便進行編譯),則在通知缺少第一個必需參數時,spring將引發異常,就像jvm在類似情況下僅拋出有關異常信息的NullPointerException異常一樣符合例外:

String a = null;
String b = null;
a.length();      //NullPointerException exception thrown
b.length();

您必須創建自定義驗證器,以檢查是否在請求中指定了參數,如果沒有,則拋出適當的異常。 就像是:

void validate(String param1, String param2) {
        Stream.of(param1, param2).filter(Objects::nonNull).findAny().orElseThrow(() -> new IllegalArgumentException("param1 and param2 are missing"));
        Optional.ofNullable(param1).orElseThrow(() -> new IllegalArgumentException("param1 is missing"));
        Optional.ofNullable(param2).orElseThrow(() -> new IllegalArgumentException("param2 is missing"));
    }

除了您要拋出的異常。 如果要用這種方法,請將“ required”標志的值設置為false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM