有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从未调用java Jackson自定义反序列化程序

我有一个类需要从JSON响应中反序列化。因为响应包含其中一个字段的字符串值,并且我需要它作为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总是尝试正常地反序列化它,当试图将字符串转换为int时,结果会引发异常。我甚至调试了它,它调用了FilterPosition的默认构造函数,该类的BeanDeserializer变量_nonStandardCreation为false

我还缺什么吗?我是否必须用注释标记Filter类中的字段,以便调用自定义反序列化程序

谢谢你的帮助


共 (0) 个答案