Jackson数据绑定中不推荐使用的属性SerializationFeature.WRITE_NULL_MAP_VALUES是否有任何替代品?

kknvjkwl  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(468)

我们使用ObjectMapper来忽略项目中空Map的序列化

configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false)

但在Jackson数据绑定2.9之后,该物业贬值,我们正在寻找替代选择。
下面的代码可以代替删除上面的属性吗?

setSerializationInclusion(Include.NON_NULL)
4uqofj5v

4uqofj5v1#

来自文件:

已弃用,因为2.9有更好的机制指定过滤;具体使用JsonInclude或配置覆盖(请参阅ObjectMapper.configOverride(Class))。确定是否序列化具有空值的Map条目(true)或不序列化(false)的功能。

注意:与其他SerializationFeatures不同,此功能不能在每次调用的基础上动态更改,因为在构建序列化器和属性处理程序时会考虑其影响。
默认情况下启用此功能。
简单举例:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Value;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.util.HashMap;
import java.util.Map;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        Map<String, Object> map = new HashMap<>();
        map.put("string", "value");
        map.put("int", 1);
        map.put("null1", null);
        map.put(null, null);

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        mapper.configOverride(Map.class).setInclude(Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.NON_NULL));

        System.out.println(mapper.writeValueAsString(map));
    }
}

以上代码打印:

{
  "string" : "value",
  "int" : 1
}

相关问题