我的一些JSON对象有一个属性名称“id”,所以我想创建一个通用的反序列化器,它调用特定的方法从数据库中检索POJO。它也必须基于关系(字段)的上下文,而不是类。
即。反序列化程序(ParentA.sameChild)<>解串器(ParentB.sameChild)
class Parent {
@Deserializer(using=MyIdDeserializer<Child>.class)
public Child myChild;
}
class MyIdDeserializer<T extends ChildDAO> extends JsonDeserializer<T> {
public T deserialize(JsonParser jp, DeserializationContext ctx) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
Integer id = node.get("id").asInt();
return T.find(id);
}
}
问题1:知道如何将类Child 传递给方法范围 T deserialize()?
问题2:还有其他策略可以解决这个问题吗?
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using=JsonSimpleName.SimpleNameSerializer.class)
public @interface JsonSimpleName {
public static class SimpleNameSerializer extends JsonSerializer<JsonSimpleNameI> {
@Override
public void serialize(JsonSimpleNameI value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("id", value.jsonId());
jgen.writeStringField("name", value.jsonName());
jgen.writeEndObject();
}
}
}
public interface JsonSimpleNameI {
public Integer jsonId();
public String jsonName();
}
现在我可以在实现JsonSimpleNameI
的类中使用简单的注释:
@JsonSimpleName
protected MyClass myClass;