我想使用 jackson json 库作为通用方法,如下所示:
public MyRequest<T> tester() {
TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
return requestWrapper.getRequest();
}
public class MyWrapper<T> {
private MyRequest<T> request;
public MyRequest<T> getRequest() {
return request;
}
public void setRequest(MyRequest<T> request) {
this.request = request;
}
}
public class MyRequest<T> {
private List<T> myobjects;
public void setMyObjects(List<T> ets) {
this.myobjects = ets;
}
@NotNull
@JsonIgnore
public T getMyObject() {
return myobjects.get(0);
}
}
现在的问题是,当我调用请求对象内的 getMyObject() 时,Jackson 将嵌套的自定义对象作为 LinkedHashMap 返回。有什么方法可以指定需要返回 T 对象吗?例如:如果我发送了 Customer 类型的对象,那么应该从该列表中返回 Customer 吗?
最佳答案
这是 Java 类型删除的一个众所周知的问题:T 只是一个类型变量,您必须指示实际的类,通常作为 Class 参数。如果没有这些信息,最好的办法就是使用边界;普通 T 与“T extends Object”大致相同。然后 Jackson 会将 JSON 对象绑定(bind)为 map 。
在这种情况下,测试器方法需要访问类,并且您可以构造
JavaType type = mapper.getTypeFactory().
constructCollectionType(List.class, Foo.class)
然后
List<Foo> list = mapper.readValue(new File("input.json"), type);
关于java - Jackson 和泛型类型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362859/