4

Spring MVC のデータバインディングについて質問があります。

@RequestBody の形式で JSON リクエストを受け入れるコントローラーがあります。私はすべての JSR 303 検証を実施しており、魅力的に機能します。

  • JSON リクエスト

    public class TestJSONRequest {
    
        @Size(min=10,message="{invalid.demo.size}")
        String demo;
    
        int code;
    }
    
  • コントローラ

    @Controller
    @RequestMapping("/test")
    public class TestController {
    
        public void testEntry(@RequestBody TestJSONRequest jsonRequest,ModelMap map)
    
          Set<ConstraintViolation<TestJSONRequest>> violationList = validator.val(jsonRequest);
          ....
          ....
          TestJSONResponse response = // Do complex Logic.
          modelMap.addattribute("TestJSONResponse",response);
        }
    }
    

ただし、受信 JSON データが Request オブジェクトにバインドされると、JSR 303 検証が開始されます。

入力 JSON 要求のコードフィールドを送信abすると、バインド自体が失敗します。

どうすればそれを処理できますか?

これらのデータ バインディング エラーをキャッチし、コントローラーである種の一般化されたエラー処理を実行したいと考えています。

これについて私を助けてもらえますか?

PS - Spring 3.0.3 を使用しています

4

1 に答える 1

4

現在のSpringドキュメント(V3.1)によると:

BindingResult を使用してエラーを調べることができる @ModelAttribute パラメーターとは異なり、@RequestBody 検証エラーでは常に MethodArgumentNotValidException が発生します。例外は DefaultHandlerExceptionResolver で処理され、400 エラーがクライアントに返されます。

次のように、新しいメソッドを作成することで、これを処理したいことを Spring に伝えることができます。

@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleValidation(MethodArgumentNotValidException e, ModelMap map) {
    List<ObjectError> errors = e.getBindingResult() .getAllErrors();
    // your code here...
    return "path/to/your/view";
}

最後に、Spring docs wrt を読んでください@ExceptionHandler。有益な情報がそこにある可能性が高いです。

于 2012-07-30T23:40:02.923 に答える