假设我有以下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)
我希望这里不应该发生转换,但它会被转换。
我猜的一种方法是使用自定义反序列化器并进行简单的类型检查:
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;
}