2017-10-13 175 views
0

假設我有一個@GetMapping一個RestController如下春天驗證多個@RequestParam

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

如果消費者對這個API進行@Get無參數1 參數2,Spring會拋出「MissingServletRequestParameterException」,但的參數1但是參數2

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

請諮詢我

+0

我認爲唯一的價值是通過使requestparma required = false,然後檢查方法中的值,然後拋出適當的異常。 –

+0

使用'Map '或爲您請求參數構建自定義驗證器。 – imk

+0

謝謝。讓我研究一下Map

回答

0

首先,這個代碼將不能編譯,因爲你有一個重新聲明範圍內的變量。而且,如果我正確地理解了這個問題,如果你重構了給定的代碼片段(以便編譯),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。

+0

1.最好不要在你回答問題時使用縮寫,有人可能不會解碼它。 2.我會建議使用'可選'類進行'空'檢查。很久以前Java 8出現了。 – DevDio

+0

謝謝。代碼不是實際的代碼,我只是輸入它的問題。 –