【问题标题】:Json mapping non standard interfaceJson映射非标准接口
【发布时间】:2020-06-17 11:30:59
【问题描述】:

我得到了一个对象映射的响应,但它们都有相同的键:

{
    "hits": [
    {
      "recipe": {
          "id" : "0",
          "label" : "chicken noodles",
          ...
      },
      "another_field": "value"
    },
     {
      "recipe": {
          "id" : "1",
          "label" : "fried chicken",
          ...
      },
      "another_field": "value"
    },
     { "recipe": {...}, ... }
    ]
}

我的宝乔:

public class SearchRecipeResponse {

    private List<RecipeResponse> hits;

    public List<RecipeResponse> getHits() {
        return hits;
    }
}
public class RecipeResponse{
    private String label;
    ...
    getters, etc
}

结果以对象列表的形式出现,但所有对象均为空,因为 json 有效负载具有此密钥“配方”。

【问题讨论】:

  • 这不是地图,它是配方对象的列表,还请解释你的问题更多什么是用例?如果它是一个 list 代替 map ,它会如何影响?还是没有唯一键?
  • 这不是一个对象列表。对象列表为:[ {}, {}, {}]。这更像是 [ "key": {} , "key": {}, "key": {}]
  • hits json 中recipe 对象的列表。您还需要向您的类添加 json 注释,以将 RecipeResponse 映射到 recipe 或将响应类重命名为 Recipe。
  • 根据当前的 JSON 结构,您将获得类似 List => Map 但正如您所提到的,您将获得相同的密钥,因此您可以捆绑它们并创建一个与键对应的列表。
  • 示例中有一个错误,{ 之一永远不会关闭。不确定这是导致问题的原因还是只是一个错字。

标签: java jackson restful-url


【解决方案1】:

您可以为配方创建一个 POJO 并将其用于映射。虽然不确定这是您想要做的,但您需要扩展您的问题以增加清晰度。

【讨论】:

    【解决方案2】:

    我通过为每个对象添加一个额外的映射来对其进行排序。我的映射是错误的。谢谢你的回答。

    public class SearchRecipeResponse {
    
        private List<HitResponse> hits;
    
        public List<HitResponse> getHits() {
            return hits;
        }
    }
    
    public class HitResponse{
        private RecipeResponse recipe;
        ...
        getters, etc
    }
    

    对于那些缺少杰克逊注释的人,我没有使用它们,因为字段名称与属性匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 2012-01-03
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多