当POJO与JSON结构不匹配时杰克逊反序列化

时间:2013-03-28 05:59:30

标签: json jersey jackson

我有一些json:

{
  key: "CORE-19",
  fields: { summary: "iblah" }
}

我想将它打包成一个看起来更像的POJO:

@JsonIgnoreProperties(ignoreUnknown=true)
public class JiraIssue
{
    private String mKey;
    private String mSummary;

    public String getKey(){ return(mKey);}
    public void setKey(String inKey){mKey = inKey;}
    public String getSummary(){return(mSummary);}
    public void setSummary(String summary){  mSummary = summary; }
}

所以基本上我不想创建一个'Fields'对象,因为它对我的需求来说有点多余。但是我真的看不到杰克逊告诉它“摘要”属性实际来自'领域'属性。这可能吗?

此类的序列化不是问题,它只会用于反序列化。我无法控制JSON格式,因为它来自外部源(以上只是一个片段)。我实际上也在和杰克逊一起使用泽西岛。

谢谢!

2 个答案:

答案 0 :(得分:1)

这种结构变化实际上是开放的issue。目前没有办法只使用注释轻松完成,而无需修改类。你可以做的是通过添加以下方法将“fields”属性作为“false”属性处理:

public void setFields(Map<String, String> fields) {
    setSummary(fields.get("summary"));
}

这样你就可以自己“解开”这个属性。

答案 1 :(得分:0)

尝试:

@JsonProperty("fields.summary")
private String mSummary;