Spring Boot:找到 ValidationMessages 但找不到 ContributorValidationMessages?

Posted

技术标签:

【中文标题】Spring Boot:找到 ValidationMessages 但找不到 ContributorValidationMessages?【英文标题】:Spring Boot: ValidationMessages found but ContributorValidationMessages not found? 【发布时间】:2018-06-23 15:14:06 【问题描述】:

我正在使用 Spring Boot 构建 Web API。端点之一接受带有 JSON 的 post 请求。我想在某些字段上设置验证消息。所以我在/src/main/resources 下添加了ValidationMessages.propertiesapplication.properties。在该文件中添加了以下几行:

doorid.notnull=Door ID is required
doorid.notblank=Door ID is empty

在我的 JSON 实体类中,我将字段“doorId”注释如下:

    @NotNull(message = "doorid.notnull")
    @NotBlank (message = "doorid.notblank")
    private String doorId;

当我使用 doorId 作为空字符串测试 API 时,它只返回代码 406,没有任何消息。在服务器日志中,它说:

ValidationMessages found.
ContributorValidationMessages not found.

ContributorValidationMessages 到底是什么?除了ValidationMessages,为什么我还需要那个?

编辑

在与ValidationMessages.properties同行的同一路径中添加ContributorValidationMessages.properties后,似乎找到了一切。

ValidationMessages found.
ContributorValidationMessages found.
org.hibernate.validator.ValidationMessages found.

但是,当我用空的doorId 尝试相同的请求时,它只返回 406。验证消息没有显示在任何地方。

【问题讨论】:

【参考方案1】:

ContributorValidationMessages 是一个属性文件,用于放置自定义约束的默认消息。

据相关blog post:

捆绑包 ContributorValidationMessages 被 Hibernate 查询 验证器,如果标准 ValidationMessages 包不包含 给定消息密钥,允许库作者提供默认值 作为 JAR 一部分的约束消息。

并根据相关document:

这种机制在创建大型多模块时也很有用 应用程序:而不是将所有约束消息放在一个 单个包,每个模块可以有一个资源包,其中包含 只有那个模块的那些消息。

【讨论】:

所以我应该使用 ContributorValidationmessages.properties 而不是使用 ValidationMessages.properties 来代替相同的内容? 如果需要在您的情况下为自定义约束放置默认消息,例如上面提到的多模块应用程序,是的,您应该使用ContributorValidationMessages 究竟什么是多模块应用程序。我只有一个绒球 您可以阅读here 获得通知。编码愉快! 显然我的应用程序不是多模块应用程序。从您的第一个报价中,听起来ContributorValidationMessages 只是一个补充文件。如果在ValidationMessages 中找不到消息密钥,它会在那里查找。但是邮件在ValidationMessages找到了,为什么还要找ContributorValidationMessages呢?

以上是关于Spring Boot:找到 ValidationMessages 但找不到 ContributorValidationMessages?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot 如何正确注入 javax.validation.Validator

Spring Boot 中的 javax.validation.constraints.Email

spring boot:validation+aop 注解方式实现校验

Spring Boot应用使用Validation校验入参,现有注解不满足,我是怎么暴力扩展validation注解的

spring boot 表单的实体提交错误:Validation failed for object='book'. Error count: 2

基于Spring Validation自定义校验注解