我有一个调用 REST Web 服务的帮助程序类。该帮助程序类从定义为通用“R”的类中的 Web 服务接收信息。我可以轻松地使用 GSON 读取 POJO 中的 JSON,但我不知道如何给它一个列表并正确读取它。
到目前为止,我尝试提取变量中 R 的类型并将其传递给 List,但没有成功。我尝试过使用 Jackson 及其 TypeFactory,也没有成功,它不会将 R 作为其参数。
我想做的是这样的:
resource = new GsonBuilder().create().fromJson(response,List<R>)
或与 jackson
resource = mapper.readValue(response, List<R>);
“response”是我的 JSON 字符串,资源是我想要返回的 List 实例。
我可以使用 GSON 或 Jackson。我一直在尝试两者,因为有些事情看起来更可能使用其中之一。
我能够使其与非泛型一起工作,但我使用泛型得到的只是 JSON 字段的映射列表的列表。它基本上忽略了 R 的类型。
此外,R 是从一个名为 BaseResource 的类扩展而来的,因此我知道 R 将始终是 BaseResource 的子级,但我需要的字段位于子级中。
奖励:我真正的最终目标是让我的通用 R 成为特定对象的列表。所以如果我可以:
resource = new GsonBuilder().create().fromJson(response,R)
和 R 可以是 BaseResource 或 List。我已经让它适用于 BaseResource,但我需要它以某种方式使其适用于 List,方法是复制其中的大部分内容并明确声明它是一个 List,或者将 List 传递给 R。
我们当前的解决方法是使用一个包含列表的包装器:
private class Result{
private List<BaseResource> result;
}
但我们希望 Web 服务返回列表而不是类似的包装器。
最佳答案
使用 GSON,您必须实现自己的序列化器,请参阅:Type Information within serialized JSON using GSON
如果您要使用 Jackson,您可以使用 @JsonTypeInfo 注释来解决此问题 多态类型:https://www.logicbig.com/tutorials/misc/jackson/jackson-json-type-info-annotation.html
关于java - 如何读取通用列表中的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676552/