使用Java和Jersey将categoryID作为键的类别JSON反序列化
我们正在使用REST Web服务(Shopware)获取产品信息。 我们的问题是总是空的类别 通过导线传输的json如下所示:使用Java和Jersey将categoryID作为键的类别JSON反序列化,java,json,rest,jersey-client,Java,Json,Rest,Jersey Client,我们正在使用REST Web服务(Shopware)获取产品信息。 我们的问题是总是空的类别 通过导线传输的json如下所示: { "data":{ "id":3, "mainDetail":{ "id":3, "articleId":3, "categories":{ "14":{ "id":14, "name":"Edelbr
{
"data":{
"id":3,
"mainDetail":{
"id":3,
"articleId":3,
"categories":{
"14":{
"id":14,
"name":"Edelbr\u00e4nde"
},
"21":{
"id":21,
"name":"Produktvergleiche & Filter"
},
"50":{
"id":50,
"name":"Brandies"
}
},
"success":true
}
}
}
@XmlElement(name = "categories")
public Category[] getCategories() {
return categories;
}
public void setCategories(Category[] categories) {
this.categories = categories;
}
Articles articles = apiClient.getClient().resource(apiClient.getBaseUrl() + this.getResourcePath()).queryParams(this.params).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).get(Articles.class);
// this always returns null
Categories categories = articles.getCategories();
我们的Articles类定义如下:
{
"data":{
"id":3,
"mainDetail":{
"id":3,
"articleId":3,
"categories":{
"14":{
"id":14,
"name":"Edelbr\u00e4nde"
},
"21":{
"id":21,
"name":"Produktvergleiche & Filter"
},
"50":{
"id":50,
"name":"Brandies"
}
},
"success":true
}
}
}
@XmlElement(name = "categories")
public Category[] getCategories() {
return categories;
}
public void setCategories(Category[] categories) {
this.categories = categories;
}
Articles articles = apiClient.getClient().resource(apiClient.getBaseUrl() + this.getResourcePath()).queryParams(this.params).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).get(Articles.class);
// this always returns null
Categories categories = articles.getCategories();
我们可以访问除类别以外的所有字段,没有问题。
我们假设这是因为ID是键,所以Jersey现在不知道如何将它们映射到正确的类
问题:
重新发布Brian Roach的评论作为回答: 由于JSON中的“categories”不是数组(它是一个对象),因此 不太可能映射到java中的数组。将其更改为:
Map
JSON中的“categories”不是数组(它是一个对象),因此不太可能映射到java中的数组。将其更改为Map
,因为这就是您所拥有的。谢谢,这就成功了。