假设有一个具有属性a和三个非抽象子类B,C和D的抽象类A。B没有其他属性,C包含属性c,D包含属性c和d。
我希望将StdDeserializer子类化为抽象类A,以便能够基于要反序列化的属性的存在来决定选择哪个子类。
我之前是从Codehaus发行的Jackson版本中做到这一点的,并且使用以下实现工作正常:
class AbstractADeserializer extends StdDeserializer<A> {
AbstractADeserializer () {
super(A.class);
}
@Override
public A deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
ObjectNode root = (ObjectNode) mapper.readTree(jp);
Class<? extends A> requestClass = null;
// root.getFieldNames() is an iterator over all field names
JsonNode cValue = root.findValue("c");
JsonNode dValue = root.findValue("d");
/*
* Check for existence of required fields and choose the
* corresponding request class.
*/
logger.debug(Boolean.toString(c != null)); …Run Code Online (Sandbox Code Playgroud)