Jackson - Custom Deserializer从未被调用过

时间:2015-10-16 13:23:23

标签: java json serialization jackson

我有一个需要从JSON响应反序列化的类。由于响应包含其中一个字段的String值,我需要它作为int,我实现了一个自定义反序列化器

班级

@JsonDeserialize(using = JsonFilterPositionDeserializer.class)
public class FilterPosition implements Comparable<FilterPosition>, Serializable {
    public int section = 0;
    public int row = 0;
    public int index = 0;

    //...getters and methods
}

这是我的自定义反序列化器

public class JsonFilterPositionDeserializer extends JsonDeserializer<FilterPosition> {
    @Override
    public FilterPosition deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        int row = node.get("row").getIntValue();
        int index = node.get("index").getIntValue();
        String section = node.get("section").asText();

        //Do stuff to transform section to int

        return new FilterPosition(sectionNum, row, index);
    }
}

这是具有FilterPosition字段

的类
public class Filter implements Serializable {

    private String id;
    private String name;
    private String type;
    private FilterPosition position;

    //Getters and setters
}

问题是,自定义反序列化器方法永远不会被调用。 Jackson总是试图正常反序列化,最终在尝试将String转换为int时抛出异常。我甚至调试了它并且它调用FilterPosition的默认构造函数,该类的_nonStandardCreation变量BeanDeserializer为false。

我有什么遗失的吗?我是否必须使用注释标记Filter类中的字段,以便调用自定义反序列化器?

感谢您的帮助

0 个答案:

没有答案