【问题标题】:Jackson deserialization when POJO does not match JSON structurePOJO与JSON结构不匹配时的Jackson反序列化
【发布时间】:2013-03-28 05:59:29
【问题描述】:

我有一些 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; }
}

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

这个类的序列化不是问题,它只会用于反序列化。我无法控制 JSON 格式,因为它来自外部源(上面只是一个 sn-p)。此外,我实际上是在使用 Jackson 和 Jersey。

谢谢!

【问题讨论】:

    标签: json jersey jackson


    【解决方案1】:

    实际上有一个开放的issue 用于这种结构变化。目前还没有办法在不修改类的情况下仅使用注释轻松做到这一点。您可以做的是将“字段”属性作为“假”属性处理,方法是添加以下方法:

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

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

    【讨论】:

    • 谢谢!很高兴知道这不仅仅是我错过了什么。
    【解决方案2】:

    试试:

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

    【讨论】:

    • 杰克逊不能这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2020-12-10
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多