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

问题描述 投票:0回答:1

假设我有以下Json数据,这里我有整数类型的id,在Java类中id的类型是String。

{
  "id": 1,
  "name": "user1"
}
@lombok.Data
@AllArgsConstructor
@NoArgsConstructor
class Data {
    String id;
    String name;
}

我想将 Json 转换为该类,同时严格检查 Json 属性的值是否与类字段的类型相同。

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

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

Data(id=1, name=user1)

我希望这里不应该发生转换,但它会被转换。

java json jackson-databind objectmapper
1个回答
0
投票

我猜的一种方法是使用自定义反序列化器并进行简单的类型检查:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.