此资源上已有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);
//...
}
}
但没有结果,我仍然得到例外! 这种情况最令人好奇的是它在我的本地计算机上运行良好,但在部署后无效。
问题:
我应该尝试解决这个问题?
答案 0 :(得分:1)
不确定是否有所作为,但您可能希望在子类型上使用@JsonTypeName
来明确命名,而不是依赖于简单的类名。这样做更安全,如果你重构事物就不太可能导致问题(比如将类移到不同的包中)。