验证JSON FIELD对阵Enum



我直接使用Jackson's ObjectMapper直接从接收到的JSON构造我的POJO。为此,我用@JsonProperty注释来注释我的字段(在这种情况下是抽象方法,因为我正在使用自动配电来减少样板)。

现在,我的POJO中的某些字段是enums,其中JSON显然包含一个常规字符串。我想以某种方式验证这些JSON字段确实确实提交给给定的枚举类型之前,在构造对象之前。

这是一个例子。

@JsonProperty(value = "messageType")
public abstract Optional<MessageType> messageType();

此属性为enum MessageType类型,相应的JSON字段是IE。" MSSAGETYPE":" A_1"是字符串。

现在,如果" MessageType"类似于" Blabla",我希望验证失败。

有什么方法可以通过使用Hibernate验证器进行注释来验证该方法?

@jsonproperty(value =" MessageType") 公共摘要可选MessageType();

假设您有,MessageType作为具有不同值A_1,A_2 ...

的枚举

创建一个静态实用方法,以从接收/发送的JSON值

中序列化/值
public static <T extends Enum<T>> T getEnumFromJson(Class<T> enumClass, String value) 
{
  if(enumClass == null) throw new IllegalArgumentException("EnumClass value can't be null");
  for(Enum<?> enumValue : enumClass.getEnumConstants()){
      if(enumValue.toString().equalsIgnoreCase(value)){
         return (T) enumValue;
      }
  }
//Validation message construct to give more meaningful details to end-user
  StringBuilder erroMsg = new StringBuilder();
  boolean bFirst = true;
  for(Enum<?> enumValue : enumClass.getEnumConstants()) {
   errorMessage.append(bFirst ? "": ", ").append(enumValue);
   bFirst = false;
  }
  throw new IllegalArgumentException(value + " is invalid value, Supported value are "+ errorMessage);
}
//Enum as represented below
public enum MessageType {
  A_1,
  A_2,
  A_3
  @JsonCreator
  public static MessageType fromValue(String value){
    return getEnumFromJson(MessageType.class, value);
  }
  @JsonValue
  public String toJson(){
    return name().toLowerCase();
  }
}

最新更新