spring - 如何在 Spring boot 应用程序中记录验证错误

标签 spring spring-boot logging bean-validation hibernate-validator

我在我的 REST 服务中使用 SpringBoot (spring-boot-starter-web 1.5.16.RELEASE) 和 hibernate-validator 6.0.11.Final。

使用适当的验证约束注释的 DTO 对象(更新:我在 Controller 参数上使用 @Valid 注释)并且验证按预期工作。

我希望将所有验证错误(发送给客户端的)记录在日志文件中。

我认为应该有一些简单的方法来启用这种消息(例如应用程序属性中的标志),但我在任何地方都找不到它。

任何建议,将不胜感激。

最佳答案

更新:
在这种情况下,您可以使用 BindingResult@Valid 之后定义的对象 Controller 方法中的 bean 声明,例如

@RequestMapping(value = "/foo")
public String foo(@Valid POJO object, BindingResult result) {
   List<FieldError> errors = result.getFieldErrors();
   for (FieldError error : errors ) {
     log.error(error.getDefaultMessage());
   } 
}

或者你最好使用 @ExceptionHandler对于异常类型 MethodArgumentNotValidException
旧答案:
如果您正在验证 bean 类
Set<ConstraintViolation<POJO>> violations = validator.validate(pojo);

然后你可以迭代违规并记录它们,比如
for (ConstraintViolation<POJO> violation : violations) {
   log.error(violation.getMessage()); 
}

复制自:https://www.baeldung.com/javax-validation

关于spring - 如何在 Spring boot 应用程序中记录验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840724/

相关文章:

java - Spring 4.2.5 无法查看日志消息

java - Spring Boot 中的 PostgreSQL 失败

java - intelij更新后无法正确导入spring boot项目

java - 使用curl命令将包含base 64编码文件(大小400Mb)的json上传到spring REST接口(interface)

java - 一个队列中的多个监听器 RabbitMQ Spring

java - NoSuchMethodError : org. springframework.data.repository.config.RepositoryConfigurationSource.getAttribute 错误

java - 在带有 Spring Rest 的全局异常处理程序中使用通用异常类处理程序是一个好习惯吗?

java - Spring Boot : Unable to read resources in lib/*. jar 使用 lib/*.jar 中的类

java - log4j 属性文件 : how to configure?

c++ - 将 Boost.Log 与 Boost.Asio 服务一起使用