从未调用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) 个答案