在Java上创建通用Jackson JSON反序列化程序 问题
我的一些JSON对象有一个属性名“id”,因此我想创建一个通用的反序列化程序,它调用特定的方法从数据库中检索POJO。它还必须基于关系(字段)的上下文,而不是类 即反序列化程序(ParentA.sameChild)反序列化程序(ParentB.sameChild) 第一次尝试:@Annotations在Java上创建通用Jackson JSON反序列化程序 问题,java,json,generics,jackson,deserialization,Java,Json,Generics,Jackson,Deserialization,我的一些JSON对象有一个属性名“id”,因此我想创建一个通用的反序列化程序,它调用特定的方法从数据库中检索POJO。它还必须基于关系(字段)的上下文,而不是类 即反序列化程序(ParentA.sameChild)反序列化程序(ParentB.sameChild) 第一次尝试:@Annotations 类似的问题,但我不想将此信息添加到json对象中:您解决了这个问题吗?在字段级别使用通用反序列化程序时,我也有类似的问题。@mpprdev nope=/ class Parent { @De
类似的问题,但我不想将此信息添加到json对象中:您解决了这个问题吗?在字段级别使用通用反序列化程序时,我也有类似的问题。@mpprdev nope=/
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);
}
}
@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();
}
@JsonSimpleName
protected MyClass myClass;