以下是班级结构:
Response.java
@Getter
@Setter
public class Response implements Serializable{
private final static long serialVersionUID = 8875657894025733696L;
@JsonProperty ("status")
public String status;
@JsonProperty("payload")
public Payload payload;
}
Payload.java
@Getter
@Setter
public class Payload<T> implements Serializable {
private final static long serialVersionUID = 1732258949055126977L;
@JsonProperty ("data")
public List <T> data;
}
此处T
是通用类
Response response = restTemplate.postForObject(url, request, Response.class);
在上面的语句中,可以使用JavaType或TypeReference来替换Response.class
,以便我可以List
直接获得T
response.getPayload().getData();
的{{1}}?目前它以LinkedHashMap
开始。
答案 0 :(得分:0)
我想你在询问的是你是否可以确定(在运行时)要反序列化的对象的实际类型。杰克逊允许你这样做,带一些额外的注释。我很好奇这是如何工作的,几年前写了sample program来测试它。
请注意,有一些不同的选项(有关详细信息,请参阅JacksonPolymorphicDeserialization),并且我已选择仅实施其中一个。
在我的示例中,我只是使用属性来注释父类,以确定要反序列化的子类,以及哪些值映射到每个可能的子类:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Pet.class, name="pet"),
@JsonSubTypes.Type(value = Child.class, name="child")
})
public abstract class Parent {...}