使用Hibernate对Enum类型进行Java8 Bean验证

时间:2018-05-06 05:38:07

标签: java enums bean-validation hibernate-validator javax

这是我的情况,

我有一个Enum类型字段的课程。我想对enum类型执行带注释的验证,类似于字符串的注释,例如:@Size@NotNull等。

问题是,json反序列化器在验证发生之前在enum类型上失败。

public class myClass {
    @JsonProperty
    //@SomeCustomValidator -- ??
    private EnumType enumValue;
}

public enum EnumType {
    A,
    B,
    C
}

少数事情:

  1. 我不想将数据类型更改为String
  2. 尝试了以下主题中的步骤,没有解决我的问题。

    Tried this link, but get an error in deserialization before validation hits

    Tried this link, but it works only when data Type is String

1 个答案:

答案 0 :(得分:0)

验证在解析参数类型后起作用。所以我没有看到如何在枚举上使用String验证注释的方法。作为解决方法,您可以使用@JsonCreator并在创建对象之前进行一些验证。

public enum EnumType {
    A,
    B,
    C;

    @JsonCreator
    public static EnumType from(String s) {
        // add your logic here, for example
        /*
        if (Stream.of(values()).map(Enum::name).noneMatch(name -> name.equals(s))) {
            throw new MyServiceException("Bad value " + s);
        }
        */
        return valueOf(s);
    }
}