自定义Jaskon解串器应知道其处理的类型

时间:2018-08-06 13:09:15

标签: json jackson2

我想编写一个自定义的Jackson反序列化器,它将允许我仅反序列化对象的一个​​属性。例如,对于一个班级:

class Student {
    @JsonDeserialize(using = IdDeserializer.class)
    Project project;
}

和json

{
  project: {
     id: 2
  }
}

它应该创建一个项目ID为2的学生对象。如果json包含任何其他项目属性,则应忽略它们,否则可能引发异常。 我还希望我的解串器具有多态性。换句话说,我想在类型扩展接口HasIdentifier的任何字段上使用它。

public interface HasIdentifier {
    Integer getId();
    void setId(Integer id);
}

到目前为止,我有类似这样的内容,但不幸的是handledType()总是返回null。所以我的问题是如何获取当前正在反序列化的字段类型。

public class IdDeserializer<T extends HasIdentifier> extends StdDeserializer<T> {

    protected IdDeserializer() {
        this(null);
    }

    protected IdDeserializer(final Class<HasIdentifier> vc) {
        super(vc);
    }

    @Override
    public T deserialize(final JsonParser arg0, final DeserializationContext arg1)
            throws IOException, JsonProcessingException {
        try {
            final T obj = (T) handledType().newInstance();
            obj.setId(5);
            return obj;
        } catch (final Exception e) {
            throw new IOException(e);
        }
    }

}

0 个答案:

没有答案