使用 属性 文件中的自定义消息进行 Hibernate 验证
Hibernate validation with custom messages in property file
您好,我正在球衣休息服务中使用休眠验证器。
这里我们如何将值传递给 属性 文件消息,如下所示
empty.check= Please enter {0}
在 {0} 中,我需要传递注释中的值
@EmptyCheck(message = "{empty.check}") private String userName
在 {0} 中我需要传递 "user name",同样我需要重新使用消息
请帮我解决这个问题。
您可以通过更改注释以提供字段描述然后在验证器中公开它来实现。
首先,在注释中添加一个 description
字段:
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EmptyCheckValidator.class)
@Documented
public @interface EmptyCheck {
String description() default "";
String message() default "{empty.check}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
接下来,更改您的消息,使其使用命名参数;这更具可读性。
empty.check= Please enter ${description}
由于您使用的是 hibernate-validator,因此您可以在验证中获取 hibernate 验证器上下文 class 并添加上下文变量。
public class EmptyCheckValidator
implements ConstraintValidator<EmptyCheck, String> {
String description;
public final void initialize(final EmptyCheck annotation) {
this.description = annotation.description();
}
public final boolean isValid(final String value,
final ConstraintValidatorContext context) {
if(null != value && !value.isEmpty) {
return true;
}
HibernateConstraintValidatorContext ctx =
context.unwrap(HibernateConstraintValidatorContext.class);
ctx.addExpressionVariable("description", this.description);
return false;
}
}
最后,在字段中添加描述:
@EmptyCheck(description = "a user name") private String userName
当 userName 为 null 或空时,这应该会产生以下错误:
Please enter a user name
您好,我正在球衣休息服务中使用休眠验证器。 这里我们如何将值传递给 属性 文件消息,如下所示
empty.check= Please enter {0}
在 {0} 中,我需要传递注释中的值
@EmptyCheck(message = "{empty.check}") private String userName
在 {0} 中我需要传递 "user name",同样我需要重新使用消息
请帮我解决这个问题。
您可以通过更改注释以提供字段描述然后在验证器中公开它来实现。
首先,在注释中添加一个 description
字段:
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EmptyCheckValidator.class)
@Documented
public @interface EmptyCheck {
String description() default "";
String message() default "{empty.check}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
接下来,更改您的消息,使其使用命名参数;这更具可读性。
empty.check= Please enter ${description}
由于您使用的是 hibernate-validator,因此您可以在验证中获取 hibernate 验证器上下文 class 并添加上下文变量。
public class EmptyCheckValidator
implements ConstraintValidator<EmptyCheck, String> {
String description;
public final void initialize(final EmptyCheck annotation) {
this.description = annotation.description();
}
public final boolean isValid(final String value,
final ConstraintValidatorContext context) {
if(null != value && !value.isEmpty) {
return true;
}
HibernateConstraintValidatorContext ctx =
context.unwrap(HibernateConstraintValidatorContext.class);
ctx.addExpressionVariable("description", this.description);
return false;
}
}
最后,在字段中添加描述:
@EmptyCheck(description = "a user name") private String userName
当 userName 为 null 或空时,这应该会产生以下错误:
Please enter a user name