我的实体类使用@NotNull
hibernate注释其中一个字段。我正在@ExceptionHelper
中捕获异常。我的问题是我想访问无效字段的值,以便我可以将它添加到记录器中。
以下是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
。
答案 0 :(得分:7)
MethodArgumentNotValidException
有getBindingResult
方法,如果失败与验证相关,则返回BindingResult
,如果没有则返回null
。因此,您可以调用getFieldErrors
方法,该方法返回FieldError
个List
。每个FieldError
都有一个getRejectedValue
,它会为您提供相应字段的无效值:
ex.getBindingResult().getFieldErrors().forEach(fieldError -> {
LOGGER.debug("Invalid {} value submitted for {}",
fieldError.getRejectedValue(), fieldError.getField());
});
ex
是MethodArgumentNotValidException
的实例。
答案 1 :(得分:1)