转换为Java类时检查Json属性值的类型

wljmcqd8  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(101)

假设我有下面的JSON数据,这里我有integer类型的id,而在Java类中,id的类型是String。

{
  "id": 1,
  "name": "user1"
}

个字符
我想将JSON转换为那个类,同时严格检查JSON属性的值是否与class字段的类型相同。

String json = "{\"id\":1,\"name\":\"user1\"}";
ObjectMapper objectMapper = new ObjectMapper(new JsonFactory());

Data data = objectMapper.readValue(json, Data.class);
System.out.println(data);


第一个月
我希望这里的转换不应该发生,但它得到了转换。

yx2lnoni

yx2lnoni1#

我想一种方法是使用自定义的验证器并进行简单的类型检查:

public class CustomDeserializer extends StdDeserializer<String> {

  protected CustomDeserializer() {
    this(null);
  }

  protected CustomDeserializer(Class<?> vc) {
    super(vc);
  }

  @Override
  public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
    if (p.currentToken() != JsonToken.VALUE_STRING) {
      throw new InvalidFormatException(p, "Expected String type", p.getValueAsString(), String.class);
    }
    return p.getValueAsString();
  }
}

字符串
然后在您想要检查的字段中使用该验证器:

public class Data {
  @JsonDeserialize(using = CustomDeserializer.class)
  String id;
}

相关问题