使用Java和Jersey将categoryID作为键的类别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

我们正在使用REST Web服务(Shopware)获取产品信息。 我们的问题是总是空的类别

通过导线传输的json如下所示:

{
   "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现在不知道如何将它们映射到正确的类

问题:

  • 这类类别的json符号有名字吗?这样我就可以在谷歌上搜索了

  • 您是否有关于jersey注释、自定义类型适配器或类似的提示,告诉反序列化程序识别类别并填充我们的类别集合


  • 重新发布Brian Roach的评论作为回答:

    由于JSON中的“categories”不是数组(它是一个对象),因此 不太可能映射到java中的数组。将其更改为:

    Map
    
    JSON中的“categories”不是数组(它是一个对象),因此不太可能映射到java中的数组。将其更改为
    Map
    ,因为这就是您所拥有的。谢谢,这就成功了。