在MethodArgumentNotValidException之后获取无效字段的值

Spr*_*ser 4 spring hibernate spring-mvc spring-data spring-boot

我的实体类用@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);
}
Run Code Online (Sandbox Code Playgroud)

我在控制器中添加@Validated了@RequestBody.

Ali*_*ani 7

MethodArgumentNotValidException有一个getBindingResult方法,BindingResult如果失败与验证相关,或者null如果没有,则返回.所以,你可以调用getFieldErrors该方法返回List的FieldError秒.每个FieldError都有一个getRejectedValue给你相应字段的无效值:

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

ex是一个实例MethodArgumentNotValidException.


pok*_*zok 2

您的实体不会存储不正确的值,而且在前面使用实体对象是不好的做法。您应该创建一个 DTO 对象,然后将其发送到您的应用程序。检查它(在这里您可以向记录器添加不正确的人员),然后将其处理到您的实体对象并尝试保存或执行您想要执行的任何操作。 在此输入图像描述