【问题标题】:Forcing validation annotation to provide a message强制验证注解提供消息
【发布时间】:2021-09-15 16:49:47
【问题描述】:

我正在使用休眠验证器进行 POJO 验证,并且我还创建了一些自定义验证器。这是一个例子:

//lombok annotations
public class Address {
  @NotNull // standard
  @State //Custom created
  String country;
}

我们需要使用特定代码而不是消息来表示所有验证错误。为了实现这一点,我们决定在我们使用的每个注释中指定代码。上面的例子现在看起来像这样:

//lombok annotations
public class Address {
  @NotNull(message="ERR_001")
  @State(message="ERR_002")
  String country;
}

但是我们对这种方法有一个问题。我们不能强制在注释中始终提供消息(在我们的例子中是错误代码)。对于自定义注解,我们不提供默认消息仍然可以,但对于标准注解,可能会错过它,如果我们不小心错过提供自定义消息,则会静默生成字符串消息。

有没有办法强制在注释中始终提供消息。保持一定的一致性可能会有所帮助。

【问题讨论】:

    标签: spring-boot hibernate-validator javax.validation


    【解决方案1】:

    据我所知,没有,没有办法做到这一点。也许您最好的选择是创建自己的注释并强制属性。

    【讨论】:

      【解决方案2】:

      Sevntu-Checkstyle 为 Checkstyle 提供额外检查,包括检查 annotation is used with all required parameters

      <module name="RequiredParameterForAnnotation">
        <property name="annotationName" value="NotNull"/>
        <property name="requiredParameters" value="message"/>
      </module>
      

      【讨论】:

      • 在构建过程中可能有用,我认为每个注释都必须像这样列出。
      【解决方案3】:

      我找不到处理它的好方法。但是现在我已经实施了一个测试,它可以让我们对其进行一些控制。它不是最好的解决方案,但现在解决了这个问题。

      我正在使用类图读取包内 POJO 类的所有注释,并在 javax 验证中对其进行过滤,如果默认消息似乎来自 javax.validation,那么我将添加到列表中。 稍后在单元测试中,我正在检查此列表是否为空。

      private List<String> getAnnotationProperties(String appliedOn, AnnotationInfoList annotationInfos) {
          return annotationInfos.stream()
                  .filter(annotationInfo -> annotationInfo.getName().contains("javax.validation.constraints"))
                  .filter(annotationInfo -> ((String) annotationInfo.getParameterValues().getValue("message")).contains("javax.validation.constraints"))
                  .map(annotationInfo -> annotationInfo.getName())
                  .collect(Collectors.toList());
          }
      

      【讨论】:

        猜你喜欢
        • 2017-04-08
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多