我有一个需要从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
类中的字段,以便调用自定义反序列化器?
感谢您的帮助