我的POJO中的自定义密钥反序列化器如下:
@JsonDeserialize(keyUsing = MyCustomKeyDeserializer.class)
@JsonInclude
private Map<T, @Range(min = 0, max = 100) Integer> ratios;
但是,我遇到的情况是以前有效的密钥不再有效,并且希望提供向后兼容性。
例如,如果用于接受键
AGE
和HEIGHT
的代码并想开始排除HEIGHT
,则JSON对象{"AGE": 30, "HEIGHT": 60}
将在地图中反序列化为{"AGE": 30}
我尝试解决此问题的方法是从
null
类返回一个MyCustomKeyDeserializer
值。但是,该地图现在以包含null
作为键之一的条目结尾。有没有办法从地图中排除空键?还是提供这种行为的另一种方法?序列化器的代码如下:
public class MyCustomKeyDeserializer extends KeyDeserializer {
private Map<String, Object> registry;
@Override
public Object deserializeKey(final String key, final DeserializationContext ctxt)
throws IOException {
return registry.get(key);
}
}
最佳答案
如果知道键名是什么,则可以使用com.fasterxml.jackson.annotation.JsonIgnoreProperties
批注:
@JsonIgnoreProperties(value = {"HEIGHT"})
@JsonDeserialize(keyUsing = MyCustomKeyDeserializer.class)
private Map<T, @Range(min = 0, max = 100) Integer> ratios;