次のような基本クラスがあります。
public class Criteria {
private CriteriaType type;
//getters & setters
public enum CriteriaType {
Condition, Medication
}
}
および派生クラス
public class ConditionCriteria extends Criteria {
private String a;
//getters & setters
}
public class MedicationCriteria extends Criteria {
private String b;
//getters & setters
}
そして別のクラス
public class CriteriaGroup {
Criteria criteria;
//getters & setters
}
CriteriaGroup
(デ) シリアル化のために Jackson を使用して、クラスのシリアル化された JSON 文字列をサーバーに送信します。サーバー上のサービスは次のようになります。
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createCriteriaGroup(CriteriaGroup criteriaGroup) {...
ただし、JAckson は逆シリアル化された JSON を派生クラスの 1 つに変換しません。クラスのtype
フィールドに従って、このマッピングをどのように達成できますか?Criteria
ありがとう..
ConditionCriteria の JSON をデシリアライズすると、次のような例外が発生します。
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "a" (Class Criteria), not marked as ignorable
at [Source: org.eclipse.jetty.server.HttpInput@3c92218c; line: 1, column: 92] (through reference chain: CriteriaGroup["criteria"]->Criteria["a"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
....