我成功地使用Hibernate验证器来验证请求POJO。getters上的注释在某种程度上是自文档化的,因此人们可以仔细阅读生成的javadoc以了解约束是什么。
我觉得这对于有效的文档来说还不够好。我试图编写一个Javadoc自定义Taglet,该Taglet内省当前包含类并构建类中属性约束的HTML表。
例如,如果一个属性有@size注释,我就可以找到关于这个ConstraintDescriptor的信息,并且“MessageTemplate”属性的值为“{javax.validation.constraints.size.message}”。我需要得到的是像“必须在X和y之间”这样的信息(或者类似的东西)。如果该字符串具有指定的实际“min”和“max”值,那就太好了,但如果它说“必须在{min}和{max}之间...”,我就没问题了。
唯一接近的是ValidatorFactory的“messageinterpolator”属性和它的“interpolate()”方法。问题是,除了消息模板之外,该方法还需要一个“上下文”对象。这当然是可以理解的,因为它必须从类似的东西中获得像“min”和“max”这样的参数,但我不明白我必须在这里提供什么。
到目前为止,我的代码看起来有点像这样:
ValidatorFactory validatorFactory =
Validation.
byProvider(HibernateValidator.class).
providerResolver(new HibernateValidatorProviderResolver()).
configure().
externalClassLoader(getClass().getClassLoader()).
messageInterpolator(new ResourceBundleMessageInterpolator(
new PlatformResourceBundleLocator(ResourceBundleMessageInterpolator.USER_VALIDATION_MESSAGES),
true, buildExpressionFactory())).
buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
BeanDescriptor constraintsForClass = validator.getConstraintsForClass(clazz);
System.out.println("constraintsForClass[" + constraintsForClass +
"] hasConstraints[" + constraintsForClass.hasConstraints() + "]");
if (constraintsForClass.hasConstraints()) {
for (ConstraintDescriptor<?> constraintDescriptor : constraintsForClass.getConstraintDescriptors()) {
System.out.println("constraintDescriptor[" + constraintDescriptor + "]");
emitTableRow(sb, "", constraintDescriptor);
}
}
for (PropertyDescriptor propertyDescriptor : constraintsForClass.getConstrainedProperties()) {
System.out.println("propertyDescriptor[" + propertyDescriptor +
"] name[" + propertyDescriptor.getPropertyName() + "]");
for (ConstraintDescriptor<?> constraintDescriptor : propertyDescriptor.getConstraintDescriptors()) {
System.out.println("constraintDescriptor[" + constraintDescriptor +
"] mt[" + constraintDescriptor.getMessageTemplate() + "]");
String interpolatedStr = validatorFactory.getMessageInterpolator().interpolate(constraintDescriptor.getMessageTemplate(), null);
System.out.println("interpolatedStr[" + interpolatedStr + "]");
您可以尝试传入MessageInterpolator.context
的虚拟实现,该实现返回您手中的描述符,验证值为null。
我想通过使用Spring Boot和Hibernate Validator进行字段验证,而不保存数据。
我有一个像下面这样的模型对象,带有自定义约束验证器。自定义验证器检查是否填充了fileName或小时。 有一种方法将此作为输入,它验证所有以下条件 > 条件不为空(通过默认验证器) criteria.id不为空(通过默认验证器) criteria.name不为空(通过默认验证器) 标准文件名或小时不为空(通过自定义验证器) 空评估(@NotNull@有效标准标准){} 现在,当我为这个模型类编写单
我下面有一个原始文件 如何获取空消息的默认值FlagDetail 像这样的事 BTW ForMessage()来自这里:https://github.com/golang/protobuf/blob/master/descriptor/descriptor_test.go 这是我的原始文件https://gist.githubusercontent.com/shiywang/3d9f53fe253
我试图覆盖默认的Hibernate验证器消息,但没有成功。我已经为几个文本使用了一个资源包,它工作得很好。问题在于验证器的消息。 详细内容: 我创建了以下文件:ValidationMessages\u de.properties并将其放置在\src\main\resources\translations\ValidationMessages\u de.properties下。该文件具有以下资源:o
我已经为此斗争了好几天,我已经阅读了这里的所有讨论,但没有解决方案...... 我有一个自定义约束… 独一无二.java 这是由UniqueConstraintValidator使用的.java 现在,我的模型有这个注释,我需要在其中验证字段的唯一性 现在,我知道自定义注释在更新现有对象时不起作用,但是现在我需要了解它是如何工作的。假设我们想要添加一个新对象。 当我试图保存一个已经存在的值时,我得
问题内容: 我在python应用程序中使用标准的python日志记录模块: 问题是,尽管未启用调试级别,但在每次循环迭代时都会评估该愚蠢的日志消息,这会严重损害性能。 有什么解决办法吗? 在C ++中,我们提供了提供以下宏的软件包: 有效评估为 但是,由于Python(AFAIK)中没有宏,是否有一种有效的日志记录方法? 问题答案: 日志记录模块已经对您要执行的操作提供了部分支持。做这个: …代替