0

我正在使用休眠验证器进行 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;
}

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

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

4

3 回答 3

0

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

我正在使用类图读取包内 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());
    }
于 2021-09-16T15:25:21.963 回答
0

Sevntu-Checkstyle为 Checkstyle提供了额外的检查,包括检查注解是否与所有必需的参数一起使用

<module name="RequiredParameterForAnnotation">
  <property name="annotationName" value="NotNull"/>
  <property name="requiredParameters" value="message"/>
</module>
于 2021-09-15T19:55:50.577 回答
0

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

于 2021-09-15T17:34:12.620 回答