如何将休眠验证应用于字符类型?
How to apply hibernate validation to Character type?
@Pattern(regexp = "^[M|F]{1}$", message ="Must be M or F")
private Character gender;
结果:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Character.
如何实现如下:
- 使用正则表达式模式对字符应用休眠验证
- 将 return 类型限制为单个字母(这就是我选择
char
的原因)
- 所有这一切都在一个方法中?
我有类似的问题,但我没有找到任何默认的休眠验证器注释。但是有一种简单的方法可以创建自定义注释。 (看这里https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/validator-customconstraints.html)下面的性别示例:
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = SexValidator.class)
@Documented
public @interface Sex
{
String message() default "{customValidator.sex";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ FIELD, METHOD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Documented
@interface List
{
Sex[] value();
}
}
public class SexValidator implements ConstraintValidator<Sex, Character> {
public void initialize(Sex sex)
{
// used only if your annotation has attributes
}
public boolean isValid(Character sex, ConstraintValidatorContext constraintContext)
{
// Bean Validation specification recommends to consider null values as
// being valid. If null is not a valid value for an element, it should
// be annotated with @NotNull explicitly.
if (sex == null)
{
return true;
}
if (sex.equals('F') || sex.equals('M'))
return true;
else
{
return false;
}
}
}
@Column(name = "sex", columnDefinition = "char(1)")
@NotNull
@Sex
private Character sex;
@Pattern(regexp = "^[M|F]{1}$", message ="Must be M or F")
private Character gender;
结果:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Character.
如何实现如下:
- 使用正则表达式模式对字符应用休眠验证
- 将 return 类型限制为单个字母(这就是我选择
char
的原因) - 所有这一切都在一个方法中?
我有类似的问题,但我没有找到任何默认的休眠验证器注释。但是有一种简单的方法可以创建自定义注释。 (看这里https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/validator-customconstraints.html)下面的性别示例:
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = SexValidator.class)
@Documented
public @interface Sex
{
String message() default "{customValidator.sex";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ FIELD, METHOD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Documented
@interface List
{
Sex[] value();
}
}
public class SexValidator implements ConstraintValidator<Sex, Character> {
public void initialize(Sex sex)
{
// used only if your annotation has attributes
}
public boolean isValid(Character sex, ConstraintValidatorContext constraintContext)
{
// Bean Validation specification recommends to consider null values as
// being valid. If null is not a valid value for an element, it should
// be annotated with @NotNull explicitly.
if (sex == null)
{
return true;
}
if (sex.equals('F') || sex.equals('M'))
return true;
else
{
return false;
}
}
}
@Column(name = "sex", columnDefinition = "char(1)")
@NotNull
@Sex
private Character sex;