gpt4 book ai didi

java - Jackson 和泛型类型引用

转载 作者:IT老高 更新时间:2023-10-28 11:31:38 26 4
gpt4 key购买 nike

我想使用 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 对象吗?例如:如果我发送了客户类型的对象,那么应该从该列表中返回客户?

最佳答案

这是一个众所周知的 Java 类型删除问题:T 只是一个类型变量,你必须指明实际的类,通常作为 Class 参数。如果没有这些信息,最好的办法就是使用边界;而普通的 T 与“T extends Object”大致相同。然后 Jackson 会将 JSON 对象绑定(bind)为 Maps。

这种情况下,tester方法需要有Class的访问权限,可以构造

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/6846244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com