首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY不能像预期的那样工作

Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY不能像预期的那样工作
EN

Stack Overflow用户
提问于 2013-09-12 14:57:56
回答 1查看 20.5K关注 0票数 32

我正在使用Jackson来解析我无法控制的JSON。JSON如下所示:

代码语言:javascript
复制
{
    "status":"0"
    "type":"type1"
    "info": {
       // additional fields
    }
}

我的类看起来像这样

代码语言:javascript
复制
public class Response {
    private String status;
    private String type;
    private Info info
}

我使用的Info的子类取决于type属性,所以我对info的映射是

代码语言:javascript
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
        @JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
        @JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
    // some fields
}

据我所知,当区分元素与必须强制转换的元素处于同一级别时,这是使用类型信息的正确方法。但这不起作用,我总是得到相同的错误:

类型意外标记(END_OBJECT),应为FIELD_NAME:缺少要包含类型id的属性“”type“”

如果我将EXTERNAL_PROPERTY更改为PROPERTY,我仍然会得到相同的错误。我对EXTERNAL_PROPERTY的理解是错误的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-04 07:28:29

来自Javadoc:

类似于属性的

包含机制,不同之处在于属性包含在层次结构的更高一层,即与JSON Object to type处于同一级别的同级属性。请注意,此选项只能用于属性,而不能用于类型(类)。尝试将其用于类将导致基本属性的包含策略。

注意到can only be used for properties是粗体的。来源:JsonTypeInfo.As.EXTERNAL_PROPERTY

因此,您必须将所有注释从Info类移动到属性infoResponse类中的setInfo方法。

代码语言:javascript
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = { @JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
        @JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public void setInfo(Info info) {
    this.info = info;
}

对我来说,您还应该从Response类中删除type属性。它将在序列化过程中动态生成。在反序列化中,你不需要它,因为Jackson关心类型。您的类可能如下所示:

代码语言:javascript
复制
class Response {

    private String status;
    private Info info;

    //getters, setters
}

另请参阅此问题:JSON nest class data binding

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18757431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档