繁体   English   中英

JSON:反序列化子类型

[英]JSON: de-serializing subtypes

此资源上已经存在相同的问题 但是答案对我来说似乎是完全错误的,对我不起作用。

有什么问题:

com.fasterxml.jackson.databind.JsonMappingException:无法将类型id'MyRequest $ GetAll'解析为[简单类型,类Request]的子类型

我所拥有的:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyRequest.GetAll.class)})
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

我尝试做的是:

我试图遵循建议,并将子类型注册从注释移至Java代码:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

public class Utils {
    private static final ObjectMapper mapper;

    static {
        mapper = new ObjectMapper();
        registerSubtypes();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
    } 

    private static registerSubtypes() { //REGISTER ALL SUBTYPES
      mapper.registerSubtypes(MyRequest.GetAll.class);
      //...
    }   
}

但是没有结果,我还是例外! 在这种情况下,最奇怪的是它在我的本地计算机上可以正常工作,但在部署后无法正常工作。

题:

我应该尝试解决什么问题?

不确定是否有所不同,但您可能想在子类型上使用@JsonTypeName来显式命名它,而不是依赖简单的类名。 这样可以更安全地维护,并且在您重构事物时(例如将类移至其他程序包)不太可能引起问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM