提问人:prince 提问时间:11/14/2023 更新时间:11/14/2023 访问量:30
在转换为 Java 类时检查 Json 属性值的类型
Check type of Json property's value on converting to Java class
问:
假设我有以下 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)
我希望这里不应该发生转换,但它会被转换。
答:
0赞
Skod
11/14/2023
#1
我猜一种方法是使用自定义反序列化程序并执行简单的类型检查:
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;
}
评论