如何将休眠验证应用于字符类型?

mem*_*und 2 java hibernate-validator

@Pattern(regexp = "^[M|F]{1}$", message ="Must be M or F")
private Character gender;
Run Code Online (Sandbox Code Playgroud)

结果:

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Character.
Run Code Online (Sandbox Code Playgroud)

如何实现以下目标:

  • 使用正则表达式模式对字符应用休眠验证
  • 将返回类型限制为单个字母(这就是我选择的原因char
  • 在一个方法中完成所有这些?

jgr*_*jgr 5

我有类似的问题,我没有找到任何默认的休眠验证器注释。但是有一种简单的方法可以创建自定义注释。(看这里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();
    }
}
Run Code Online (Sandbox Code Playgroud)


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;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)


@Column(name = "sex", columnDefinition = "char(1)")
@NotNull
@Sex
private Character sex;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是一个选择。不过,如果注释仅用于单个字段(我的应用程序就是这种情况),则感觉有点过度设计。然后,最好使用“@AssertTrue isSexValid()”创建一个私有验证方法,并在其中应用规则检查。 (2认同)