java - 用于 Map 的 Jackson 自定义 KeyDeserializer,不包括 key 为 null 的条目
问题描述
我的 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;
推荐阅读
- c++ - 如何将地图作为不可变地图传递?
- python - 在 Qt5 日历小部件中突出显示日期间隔
- amazon-ec2 - 在 Amazon Linux EC2 中安装 minikube kubernates 时出错
- python - 在 lpthw ex42 中没有获得 self.start_scene
- android - 如何修复使用 AMAP SDK 的不合规 Android 应用
- jquery - 使用 jQuery 隐藏 Div 并滚动到锚点
- python - 如何使用python连接文件夹中的所有音频(.wav)文件?
- go - 如何从 http.Request 的响应中读取文件内容
- google-chrome-extension - 如何在 Chrome.i18n 消息字符串中添加换行符
- javascript - 如何在 htmlstring 中传递 javascript 数组的值以更改 innerHTML