Jackson在Spring的Map?

pes8fvy9  于 2023-01-12  发布在  Spring
关注(0)|答案(4)|浏览(143)

我有以下JSON

{
  "cmop": {
    "1001678": {
      "info": {
        "1005485": {"wt":1}
      }
    },
     "1001671": {
      "info": {
        "1005482": {"wt":2}
      }
    },
     "1001679": {
      "info": {
        "1005488": {"wt":3}
      }
    }
  }
}

下面是我的模型类

public class Campaign {
@JsonProperty("cmop")
private CostDeal costDeal;
}

成本交易类

public class CostDeal {
private Map<String,CostDetail> costDetail;
}

成本明细类

public class CostDetail{
@JsonProperty("wt")
private int weightage;
}

我得到的costDetailMap对象为空。我错过了什么吗?

nqwrtyyt

nqwrtyyt1#

不知道您是如何解析的,但考虑到其他一切都是正确的,并且只是为了查看您共享的代码片段,您在错误的位置添加了@JsonProperty("cmop")注解。它必须与您的costDetail对象相关联,因为您试图在costDetail MAP中指定json标记“cmop”的值。

public class CostDeal {
@JsonProperty("cmop")
private Map<String,CostDetail> costDetail;
}
kcugc4gi

kcugc4gi2#

由于您的Map中似乎存在不匹配(请参阅我的注解),所以我做了一些假设,在Campaign的正下方添加了一个额外的类,因此这里有一个应该是可解析的模型(为了简单起见,保留getter和setter):

public class Campaign {
    @JsonProperty("cmop")
    private CMOP cmop;
}

//the added class - choose a name as needed
public class CMOP {     
    private Map<String, CostDeal> deals = new HashMap<>();

    @JsonAnySetter
    public void addDeal(String key, CostDeal deal) {
        deals.put(key, deal);
    }
}

public class CostDeal {
    @JsonProperty("info") //mapped to the "info" you have in your json
    private Map<String, CostDetail> costDetail;
}

public class CostDetail {
    @JsonProperty("wt")
    private int weightage;
}
vulvrdjw

vulvrdjw3#

变更模式
类Campaign公共类Campaign { @JsonProperty(“cmop”)私有Map〈Long,CostDeal〉mapCostDeal;}
类CostDeal公共类CostDeal { @JsonProperty(“info”)私有Map〈长,成本细节〉成本细节;}
类CostDetail公共类CostDetail { @JsonProperty(“wt”)私有整数权重;}

gorkyyrv

gorkyyrv4#

您在错误的位置添加了@JsonProperty(“cmop”)注解。
它必须与您的costDetail对象相关联,因为您正在尝试将json标记“cmop”的值获取到costDetail MAP中。

public class CostDeal {
@JsonProperty("cmop")
private Map<String,CostDetail> costDetail;
}

相关问题