强制验证注解提供消息
Forcing validation annotation to provide a message
我正在使用休眠验证器来进行 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;
}
但是我们在使用这种方法时遇到了问题。我们不能强制在注释中一直提供消息(在我们的例子中是错误代码)。对于自定义注释,它仍然可以,因为我们不提供默认消息,但对于标准注释,有机会错过它,如果我们不小心错过提供自定义消息,则会静默生成字符串消息。
有没有办法强制在注释中始终提供消息。保持一定的一致性可能会有所帮助。
据我所知,不,没有办法做到这一点。也许您最好的选择是创建自己的注释并使该属性成为必需属性。
Sevntu-Checkstyle provides additional checks to Checkstyle, including a check that an annotation is used with all required parameters.
<module name="RequiredParameterForAnnotation">
<property name="annotationName" value="NotNull"/>
<property name="requiredParameters" value="message"/>
</module>
我找不到好的处理方法。但现在我已经实施了一项测试,让我们可以对其进行一些控制。这不是最好的解决方案,但暂时解决了这个问题。
我正在使用类图读取包内 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());
}
我正在使用休眠验证器来进行 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;
}
但是我们在使用这种方法时遇到了问题。我们不能强制在注释中一直提供消息(在我们的例子中是错误代码)。对于自定义注释,它仍然可以,因为我们不提供默认消息,但对于标准注释,有机会错过它,如果我们不小心错过提供自定义消息,则会静默生成字符串消息。
有没有办法强制在注释中始终提供消息。保持一定的一致性可能会有所帮助。
据我所知,不,没有办法做到这一点。也许您最好的选择是创建自己的注释并使该属性成为必需属性。
Sevntu-Checkstyle provides additional checks to Checkstyle, including a check that an annotation is used with all required parameters.
<module name="RequiredParameterForAnnotation">
<property name="annotationName" value="NotNull"/>
<property name="requiredParameters" value="message"/>
</module>
我找不到好的处理方法。但现在我已经实施了一项测试,让我们可以对其进行一些控制。这不是最好的解决方案,但暂时解决了这个问题。
我正在使用类图读取包内 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());
}