gpt4 book ai didi

java - Jackson 用于 Map 的自定义 KeyDeserializer,排除 key 为 null 的条目

转载 作者:行者123 更新时间:2023-11-30 05:21:03 27 4
gpt4 key购买 nike

我的 POJO 中的自定义 key 解串器如下:

@JsonDeserialize(keyUsing = MyCustomKeyDeserializer.class)
@JsonInclude
private Map<T, @Range(min = 0, max = 100) Integer> ratios;

但是,我遇到了一种情况,以前有效的 key 不再有效,并且希望提供向后兼容性。

例如,如果代码用于接受键 AGEHEIGHT 并且想要开始排除 HEIGHT,则 JSON 对象 {"AGE": 30, "HEIGHT": 60} 将被反序列化为 map 中的 {"AGE": 30}

我尝试解决该问题的方法是从 MyCustomKeyDeserializer 类返回 null 值。但是, map 现在以包含 null 作为键之一的条目结束。有没有办法从 map 中排除空键?或者提供这种行为的不同方法?

序列化器的代码如下:

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;

关于java - Jackson 用于 Map 的自定义 KeyDeserializer,排除 key 为 null 的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com