【问题标题】:JSON: de-serializing subtypesJSON:反序列化子类型
【发布时间】:2013-12-15 09:55:43
【问题描述】:

此资源上已有same issue。但答案对我来说似乎完全错误,并且对我不起作用。

什么问题:

com.fasterxml.jackson.databind.JsonMappingException: 无法解析 将 id 'MyRequest$GetAll' 键入 [simple type, class 请求]

我有什么:

@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() {
    }
}

我尝试做的事情:

我尝试遵循that 的建议,将子类型注册从注解移至 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);
      //...
    }   
}

但是没有结果,我还是得到了一个异常! 在这种情况下最奇怪的是它在我的本地机器上可以正常工作,但在部署后无法正常工作。

问题:

我应该如何解决这个问题?

【问题讨论】:

    标签: java json spring jackson fasterxml


    【解决方案1】:

    不确定是否会有所不同,但您可能希望在子类型上使用@JsonTypeName 来明确命名它,而不是依赖简单的类名。这样维护起来更安全,并且在重构时不太可能导致问题(例如,将类移动到不同的包中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      相关资源
      最近更新 更多