2016-03-30 18 views
3

私のエンティティクラスにはフィールドの1つに休止状態の@NotNullが注釈されています。例外は@ExceptionHelperにあります。私の問題は、無効なフィールドの値にアクセスしてロガーに追加できるようにすることです。ここでMethodArgumentNotValidExceptionの後に無効なフィールドの値を取得する

ExceptionHandler次のとおりです。

@ExceptionHandler({ MethodArgumentNotValidException .class }) 
@ResponseBody 
public ResponseEntity<?> handleInvalidMethodArgException(MethodArgumentNotValidException de) { 
    List<FieldError> bindingResult = de.getBindingResult().getFieldErrors(); 
    LOGGER.debug(String.format("Start : %s : handleDataexception()", this 
       .getClass().getSimpleName())); 

    for(FieldError fieldError: bindingResult){ 
     LOGGER.debug("Invalid {} value submitted for {}", 
          fieldError.getRejectedValue(), fieldError.getField()); 
    } 

    ErrorMsg = new ErrorMsg(errorCode, errorMessage); 
    return new ResponseEntity<>(errMsg, HttpStatus.NOT_FOUND); 
} 

私はコントローラに@RequestBody@Validatedを追加しています。

答えて

1

あなたのエンティティは不正確な値を格納しませんさらに、正面にエンティティオブジェクトを使用することは悪い習慣です。アプリケーションに送るよりも、DTOオブジェクトを作成する必要があります。これをチェックして(ここではロガーに不正なスタッフを追加することができます)、それをエンティティオブジェクトに処理し、保存するか、何をしたいかを試してください。

enter image description here
+0

回答ありがとうございます。ロガーに間違ったものを追加するのに役立つリンクは表示されません。 –

+0

自分のコンセプトでシンプルなイメージを追加しました。アセンブラはエンティティをdtoに、そしてdtoをエンティティに処理するクラスです。転送/検証はあなたのログを追加できる場所です。 DTO - データ転送オブジェクト。不要なデータをビューからモデルに転送する場合にのみ作成され、逆も同様です。これは、エンティティ(あなたが提示する必要があるすべてのフィールド)より少ないフィールドを含むことができます。 – pokemzok

3

MethodArgumentNotValidException障害が検証に関連する、またはnull。ない場合であればBindingResultを返すgetBindingResult方法を有しています。したがって、メソッドを呼び出して、ListFieldErrorに戻すことができます。各FieldErrorはあなたに対応するフィールドの無効な値を与えるgetRejectedValueがあります

ex.getBindingResult().getFieldErrors().forEach(fieldError -> { 
      LOGGER.debug("Invalid {} value submitted for {}", 
        fieldError.getRejectedValue(), fieldError.getField()); 
}); 

exMethodArgumentNotValidExceptionのインスタンスです。

+0

多くのありがとうございました。それは働いた:) –

+0

@Spring User動作する答えを受け入れることができますまた、いくつかのDTOとアセンブラを作成する上でpokemzok勧告を検討してください –

+0

しかし、@ExceptionHandler(MethodArgumentNotValidException)を追加した後でさえコンソール上でMethodArgumentNotValidExceptionを見ることができます。コードで –

関連する問題