2016-07-08 9 views
0

Spring RESTアプリケーションで作業しています。
このアプリケーションには、RESTコントローラのみがあり、ビュー部分はありません。

私は上記の例では例えば@RequestParam


Spring RESTコントローラでリクエストパラメータを検証する方法

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

を検証することができ、私の目標は、Dateを検証する方法を知りたいです。誰かが無効な値を渡したとしたら、その状況を処理できるはずです。
ステータスが500であることを示しています。

PS
私の質問はちょうど約Date検証ではありません。
booleanパラメータがあり、誰かが誤ってtrueの代わりにtruを渡したとします。この状況も同様に処理できるはずです。

それが値を解析することはできませんので、事前に感謝:)

+0

あなたがカスタムバリデーションを実装する必要があるように見えます –

+0

@MarcoAciernoどうすればいいですか、私にリンクなどを教えてください。ありがとう:) –

答えて

3

春は、500ステータスコードで失敗します。要求処理の

段階がある:@Validatedはを使用する場合

  1. 要求
  2. 検証値をエンドポイント
  3. 解析リクエストパラメータ/ボディ値を識別し、検出されたオブジェクトにバインド受け取ります
  4. 適切なパラメータでメソッド呼び出しを入力する

あなたのケースでは、フローはparse(3)フェーズで失敗します。

ほとんどの場合、BindExceptionが届きます。 これらのケースは、コントローラ用の例外ハンドラを用意することで処理できます。 (Date sの特にhussle)期待通りに機能していない解析するとき

@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; 
    } 
} 

そうでない場合は、カスタムマッパー/シリアライザを追加することもできます。

ほとんどの場合、値をシリアライズ/デシリアライズする必要があるため、ジャクソンを設定する必要があります。

+0

私はこれを試してみましょう、ありがとう:) –

関連する問題