- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类:
public abstract class JsonMotivation {
protected int motivationid;
... getters and setters
public abstract String getMotivationType();
public void setMotivationType(String motivationType) {
}
}
这个 motivationType 数据字段将保留一个引用
然后我有一些实现类:
@XmlRootElement
public class JsonAntibioticMotivation extends JsonMotivation {
protected long smhid;
protected int userid;
@Override
public String getMotivationType() {
return "AB";
}
... getters and setters
}
最后,我还有一些扩展 JsonAntibioticMotivation 类的类,例如
@XmlRootElement
public class JsonSwitchAntibioticMotivation extends JsonAntibioticMotivation {
@Override
public String getMotivationType() {
return "AB-S";
}
... some additional dataparameters
}
其中一个名为 JsonMedicationhistory 的类引用了抽象类 JsonMotivation。在反序列化时,我收到一条错误消息“无法构造 be.uzgent.cosara.model.json.JsonMotivation 的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器,或者使用其他类型信息进行实例化”
Jackson 不知道使用哪个具体类进行反序列化似乎合乎逻辑。我能否以某种方式将 motivationType 映射到具体类?我尝试编写自定义反序列化器并使用 @JsonDeserialize(using=JsonMotivationDeserializer.class)
public class JsonMotivationDeserializer extends JsonDeserializer<JsonMotivation> {
@Override
public JsonMotivation deserialize(JsonParser jp,
DeserializationContext ctxt) throws IOException,
JsonProcessingException {
ObjectMapper mapper= new ObjectMapper();
JsonNode node=jp.getCodec().readTree(jp);
JsonNode motivationTypeNode=node.get("motivationType");
if(motivationTypeNode!=null){
String motivationType=motivationTypeNode.textValue();
switch(motivationType){
case "AB": return mapper.readValue(jp, JsonAntibioticMotivation.class);
case "AB-N": return mapper.readValue(jp, JsonNewAntibioticMotivation.class);
case "AB-S": return mapper.readValue(jp, JsonSwitchAntibioticMotivation.class);
case "AB-E": return mapper.readValue(jp, JsonExtendAntibioticMotivation.class);
}
}
return null;
}
}
然而,这似乎并没有解决问题。 ObjectMapper 似乎不知道原始映射。知 Prop 体类后,是否有办法将其余过程委托(delegate)给原始反序列化过程?
最佳答案
似乎我只需要用
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
注释我的 Json Motivation 类
然后可以删除自定义反序列化器。
关于java - 自定义JsonDeserializer在resteasy中反序列化抽象类的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33545482/
我正在尝试从另一个 JsonDeserializer 调用自定义 JsonDeserializer,但我不知道如何调用。 我在我的实体中使用 @JsonDeserialize 注释: @JsonDes
我无法让 JsonDeserializer 处理空值。我正在读取一个 json 文件,其中记录类型只有四个值:Case 1、Case 2、* 或 null。 JsonDeserializer 对于前
当 @JsonDeserialize 注释不起作用时,我遇到了问题。例如,当客户端的生日值包含“12.06.1999”时,我收到 400 Bad Request http 代码响应。这对我来说是一个非
我需要创建一个通用反序列化器;换句话说,我不知道反序列化的目标类是什么。 我在互联网上看到过示例,他们创建了一个反序列化器,例如 JsonDeserializer然后返回 new Customer(.
我正在使用 Camunda 工作流自动化,我想实现 JSON 序列化。 这里有一个示例项目:https://github.com/camunda/camunda-bpm-examples/tree/m
我收到的 HttpResponseMessage 如下所示(数据已编辑): { "tracks" : { "href" : "{href_here}", "items" : [ {
我有一个现有的类层次结构,如下所示: public interface Service { String getId(); String getName(); } public class F
我需要计算我的对象中从 JSON 获得的一些数据。这是我的 JSON 对象: { "myObject": { "controlPoints": [10,15,20,25] }
这个问题在这里已经有了答案: Spring Data JPA - ZonedDateTime format for json serialization (3 个答案) 关闭 2 年前。 我想从我的
我有如下字符串: {"226167":"myshow","3193":"yourshow"} 如何使用 JSONDeserializer 从上述字符串对象中提取 (226167,3193)?
我想使用 RestSharp 反序列化反序列化带有数组的 JSON。 public class details { public string id { get; set; } pub
我有一些来自 Last.fm 的 JSON,如下所示: { "toptags":{ "@attr":{ "artist":"Whatever",
我正在尝试为从 arangodb 获取的对象设置自定义反序列化器。 MyDocument 是我存储在 arangodb 中的类: public class MyDocument { priv
我有一个字符串: [{"product_id":"2","name":'stack"'},{"product_id":"2","name":"overflow"}]" 如何使用 Flexjson 的
我正在尝试从 Java 中的 json 字符串中提取属性,并且正在编写 JsonDeseriizer 来执行此操作。 我的尝试如下所示: public class testJacksonSimple
我有一个类,其中有一个自定义反序列化器注释: @JsonDeserialize(using = ConvertToNullDeserializer.class) public void setObje
因此,对于我正在编写的这个小程序,我希望解析 Twitter 的推文流。我使用 Gson 库,效果很好。 Gson 无法解析 Twitter 的 created_at 日期时间字段,因此我必须编写一个
当对象映射器读取继承属性的值时,JsonDeserialize 不起作用。 车辆类别 @Getter @Setter @JsonDeserialize(builder = Vehicle.Vehicl
是否有任何方法可以为使用 Jackson 2.X 和 Spring Framework 实现特定接口(interface)的所有类型注册 JSON 反序列化器,而不是使用 @JsonDeseriali
我有一个具有多个自定义属性的枚举。我能够序列化它,并且我创建了一个 @JsonCreator 方法来反序列化它,但它不起作用: import com.fasterxml.jackson.annotat
我是一名优秀的程序员,十分优秀!