簡體   English   中英

如何在Spring REST控制器中驗證請求參數

[英]How to validate request parameters in Spring REST controller

我正在開發Spring REST應用程序。
此應用程序只有REST控制器,沒有視圖部分。

我想知道如何驗證@RequestParam

例如

@RequestMapping(value = "", params = "from", method = RequestMethod.GET)
    public List<MealReadingDTO> getAllMealReadingsAfter(@RequestParam(name = "from", required = true) Date fromDate) {
......
......
}

在上面的示例中,我的目標是驗證Date 假設有人傳遞了一個無效的值,那么我應該能夠處理這種情況。
現在,它的給予與例外狀態為500

聚苯乙烯
我的問題不只是關於Date驗證。
假設有一個boolean參數,並且有人錯誤地將tru傳遞給true而不是true ,那么我也應該能夠處理這種情況。

提前致謝 :)

Spring將失敗,並顯示500狀態代碼,因為它無法解析該值。

請求處理的階段為:

  1. 收到請求
  2. 識別終點
  3. 解析請求參數/主體值,並將其綁定到檢測到的對象
  4. 如果使用@Validated則驗證值
  5. 使用適當的參數輸入方法調用

在您的情況下,流在parse(3)階段失敗。

您很可能會收到BindException 您可以通過為控制器提供異常處理程序來處理這些情況。

@ControllerAdvice
public class ControllerExceptionHandler {
     @ExceptionHandler(BindException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     @ResponseBody
     public YourErrorObject handleBindException(BindException e) {
         // the details which field binding went wrong are in the 
         // exception object. 
         return yourCustomErrorData;
     }
}

否則,當解析無法按預期運行時(尤其是帶有Date的麻煩),您可能要添加自定義映射器/序列化器。

很可能您必須配置Jackson,因為該軟件包負責序列化/反序列化值。

暫無
暫無

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

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