[英]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.