当前位置: 首页 > 知识库问答 >
问题:

根据枚举验证JSON字段

鲁鸿
2023-03-14

我正在使用Jackson的ObjectMapper直接从收到的JSON构建我的POJO。为此,我用@JsonProperty注释来注释我的字段(在本例中,字段是抽象方法,因为我使用AutoValue来简化样板文件)。

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

下面是一个例子。

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

此属性的类型为enum MessageType,对应的JSON字段为ie.“MessageType”:“A_1”,它是一个字符串。

现在,如果“messageType”类似于“blabla”,我希望验证失败。

有没有办法使用Hibernate Validator通过注释验证这一点?

共有1个答案

万俟承望
2023-03-14

@JsonProperty(value=“messageType”)公共抽象可选messageType();

假设您有,MessageType为enum,具有不同的值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();
  }

}
 类似资料:
  • 使用上面的代码,我可以根据枚举值获取字段的值。现在如何设置字段的基于值例如:如果被选中,那么我需要设置到输入值。

  • 问题内容: 有没有一种方法可以针对该结构的JSON模式验证JSON结构?我已经查看并发现JSON.Net验证了,但这并不能满足我的要求。 JSON.net可以: 这证明是正确的。 这也证明是真的 仅此验证为假。 理想情况下,我希望它可以验证那里也没有应该存在的字段。 问题答案: 我认为您只需要添加 到您的架构。这将停止提供未知属性。 因此,现在您的结果将是:-正确,错误,错误 测试代码… 输出:-

  • 这是要根据模式验证的JSON。 问题是,如果我们传递了错误的数据,它将正确地验证eid和ename的类型(即整数或字符串)。对于例如: 如果我们为限定传递了错误的类型,那么它将验证为true(即,它不验证限定的类型,可能是因为它是嵌套的)。

  • 问题内容: 我从一些JSON文件创建了API规范,并且尝试测试这些文件是否根据API规范进行了验证。 有一些不错的工具可以根据JSON Schema进行验证,但是我没有找到针对Swagger中创建的规范进行验证的工具(用于创建API架构的工具)。我发现的唯一解决方案是在Swagger- Editor中生成客户端/服务器,这非常麻烦。 是否已经有现有工具可以针对Swagger Schema验证JSO