2016-06-24 9 views
0

をスローコントローラでのデータバインディングは、私がモデルとしてメソッドのパラメータを持つコントローラを持っている例外

public Response create(Customer customer){ 
    } 

顧客モデルと言う:私が送信した場合、顧客のモデルが闊歩UIから

@JsonTypeInfo( use = JsonTypeInfo.Id.NAME,property = "type") 
@JsonSubTypes({@Type(value = Config.class, name = "IPC")}) 
public class Customer(){ 
private String type; } 
  1. のように見えますがタイプIPCとして動作しますが、IPC以外の値はバインディング中に400例外をスローします。コントローラ内でこの例外をキャッチする方法はありますか?

答えて

0

HandlerExceptionResolverインターフェースと SimpleMappingExceptionResolverの実装はあなたが一緒に宣言特定のビューに 例外をマッピングできるようにすると述べている@ExceptionHandler注釈に

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-exceptionhandler)スプリング4のドキュメントを使用するようにしてくださいいくつかのオプション これらのビューに転送する前にJavaロジック。しかし、場合によっては、 の解像度ではなく@ResponseBodyメソッドに頼る場合には のステータスを直接設定し、エラー内容を 応答の本体に直接書き込む方が便利な場合もあります。

これは、@ExceptionHandlerメソッドで行うことができます。 コントローラ内で宣言された場合、そのようなメソッドは、そのコントローラ(またはそのサブクラスのいずれか)の@RequestMapping メソッドによって発生した例外に適用されます。 @ControllerAdviceクラス内で@ExceptionHandlerメソッドを宣言することもできます。 この場合、多くのコントローラーの の@RequestMappingメソッドからの例外を処理します。以下は、コントローラ、ローカル @ExceptionHandler方法の一例である:だから、あなたのコントローラで、あなたがこの

@ExceptionHandler(MethodArgumentNotValidException.class) 
public String handleArgumentNotValid(MethodArgumentNotValidException e, ModelMap map, HttpServletRequest request) { 
    List<ObjectError> errors = e.getBindingResult() .getAllErrors(); 
    //you can get the exception e, 
    //you can get the request 
    //handle whatever you want the then return to view 

    return "your view that you will handle the exception"; 
} 
のようなメソッドを持つことができます

関連する問題