Json Jackson自定义泛型反序列化程序

Json Jackson自定义泛型反序列化程序,json,rest,generics,serialization,jackson,Json,Rest,Generics,Serialization,Jackson,我需要创建自定义类型的bean反序列化程序。 T是一个独立性 public interface IEntity { public int getId(); } @JsonDeserialize(using = RestLoaderRequestDeserializer.class) @Produces(MediaType.APPLICATION_JSON) public class RestLoaderRequest<T extends IEntity> Serializa

我需要创建自定义类型的bean反序列化程序。 T是一个独立性

public interface IEntity {
    public int getId();
}

@JsonDeserialize(using = RestLoaderRequestDeserializer.class)
@Produces(MediaType.APPLICATION_JSON)
public class RestLoaderRequest<T extends IEntity> Serializable {
    private T entity; // entity to load field to
    private String className; // actual class of entity
    private String fieldName; // fieldName to lazy REST load

// constructors(non parameter & all parameter), getters, setters, hashCode, equals, toString
}
现在我得到的是:

public class RestLoaderRequestDeserializer extends JsonDeserializer<RestLoaderRequest<IEntity>> {

    @Override
    public RestLoaderRequest<IEntity> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        try {
        ObjectCodec objectCodec = jp.getCodec();
        JsonNode node = objectCodec.readTree(jp);
        String className = node.get("className").textValue();
        String fieldName = node.get("fieldName").textValue();

        Class<?> clazz = Class.forName(className);

        JsonNode rawEntityNode = node.get("entity");
                    // How to deserialize rawEntityNode to T based on className ?

        RestLoaderRequest<IEntity> request = new RestLoaderRequest<IEntity>();
        request.setClassName(className);
        request.setFieldName(fieldName);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    return null;
    }

}

1如何根据类名自动反序列化实体?

请记住,类型信息的处理和有效负载数据的处理是分开的。 因此,常规JSON反序列化程序根本不应该处理类型:而是使用单独的TypeSerializer和TypeDeserializer。这样做是为了防止组合数量的爆炸;对于不同的包含机制,有两个TypeSerializer/-Deserializer实现,但有数百个值反序列化器


当您拥有完全控制权时,自定义反序列化程序显然可以打破这种分离。但是core Jackson有这种分离,您可以在标准处理程序中看到示例。

您还可以提供您试图反序列化的JSON吗?这是个好问题,因为实体字段根本没有序列化。我最终编写了自己的自定义序列化程序,然后我知道如何反序列化它。我稍后会发布正确答案。谢谢你的回复,我不知道。谢谢你的信息。我很快会查的。