MyCustomKeyDeserializer

MyCustomKeyDeserializer

我的POJO中的自定义密钥反序列化器如下:

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


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

例如,如果用于接受键AGEHEIGHT的代码并想开始排除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;

10-01 22:23