我有一个工作的REST客户端类使用javax.ws.rs.WebTarget,.Client和javax.ws.rs.core.MediaType为服务器的REST服务返回JSON字符串.不幸的是,在我相信是JSON字符串的格式更改后,我不能再通过WebTarget将结果解析为POJO,相反,我得到了“从输入流阅读实体时出错”,原因是“无法从START_OBJECT标记中反序列化myproject.pojo.Entity[]的示例”。
Entries.java:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Entity {
private String key;
public Entity() {}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
RestClient.java 解析所有实体的www.example.com方法,其中目标是WebTarget的示例:
public Entity[] getEntities() {
return target.path("entities").request(MediaType.APPLICATION_JSON).get(Entity[].class);
}
当使用.get(String.class)而不是POJO并将结果打印到控制台时,我看到我得到的JSON文本很好:
{ "elements": [ { "key": "key1", "name": "name1", "someAdditionalInfo": { "info1": "info1", "info2": "info2"} }, {"key:" "key2", etc...} ], "total": 23 }
我怀疑列表前后的“elements:“前缀和“total”后缀是所有这一切的原因。我尝试使用.get(new GenericEntity(){}),但结果相同。
2条答案
按热度按时间fdbelqdn1#
您的JSON包含一个在“elements”字段中有数据的对象,而不是数组。要解析它,您需要创建一个与您的输入匹配的对象(DTO),例如:
这里重要的是,包含数据的字段也命名为
elements
,以便Jackson反序列化器根据您的项相应地设置此字段。这应该允许您获得如下结果
fruv7luv2#
看起来之前的响应只包含实体列表,现在它被命名为“elements”。要修复它,您应该创建一个新的Java类来充当实体列表的 Package 器:
这是假设你不关心获取“total”的值,然后改变你的控制器使用新的 Package 器类: