2

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

有什么问题:

com.fasterxml.jackson.databind.JsonMappingException:无法将类型 id 'MyRequest$GetAll' 解析为 [simple type, class 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);
      //...
    }   
}

但是没有结果,我仍然得到一个异常!在这种情况下最奇怪的是它在我的本地机器上运行良好,但在部署后无法运行。

问题:

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

4

1 回答 1

1

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

于 2013-12-04T21:07:52.553 回答