2016-03-30 3 views
3

Мой класс сущности аннотируется с помощью @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); 
} 

Я добавил @Validated с @RequestBody в контроллере.

ответ

1

Ваша сущность не будет хранить неправильные значения, кроме того, неверно использовать объект сущности на передней панели. Вы должны создать объект DTO, чем отправить его в свое приложение. Проверьте его (здесь вы можете добавить неверный персонал в журнал), а затем обработайте его объекту объекта и попытайтесь сохранить или что хотите. enter image description here

+0

Спасибо за ответ. Я не вижу ссылки, которые могли бы помочь добавить неправильный материал в регистратор. –

+0

Я добавил простой образ с моей концепцией. Ассемблер - это класс, который обрабатывает вашу сущность до dto и вашего dto для сущности. Transfer/Validation - это место, где вы можете добавить свой журнал. DTO - объект передачи данных, объект, созданный только для передачи необходимых данных из представления в модель и наоборот. Он может содержать меньше полей, чем сущность (все поля, которые вам нужно представить). – pokemzok

3

MethodArgumentNotValidException имеет getBindingResult метод, который возвращает BindingResult, если отказ является проверка связанных или null, если нет. Таким образом, вы можете вызвать метод getFieldErrors, который возвращает List из FieldError s. Каждый FieldError имеет getRejectedValue, который дает вам недопустимое значение соответствующего поля:

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

ex является экземпляром MethodArgumentNotValidException.

+0

Большое спасибо.Он работал :) –

+0

@Spring User Вы можете принять и проголосовать за рабочий ответ, а также рассмотреть рекомендацию покемзока по созданию некоторых DTO и ассемблеров –

+0

Но я могу видеть MethodArgumentNotValidException на консоли даже после добавления @ExceptionHandler (MethodArgumentNotValidException) в коде. –

Смежные вопросы