【问题标题】:Is there any replacement for deprecated property SerializationFeature.WRITE_NULL_MAP_VALUES in Jackson Databind?Jackson Databind 中已弃用的属性 SerializationFeature.WRITE_NULL_MAP_VALUES 是否有任何替代品?
【发布时间】:2020-03-26 21:55:47
【问题描述】:

我们正在使用 ObjectMapper 来忽略项目中空映射的序列化

configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false)

但在 Jackson-Databind 2.9 之后,该属性已折旧,我们正在寻找替代方案。

下面的代码可以代替删除上面的属性吗?

setSerializationInclusion(Include.NON_NULL)

【问题讨论】:

    标签: java jackson deprecated jackson-databind


    【解决方案1】:

    来自documentation

    已弃用。从 2.9 开始有更好的机制来指定 过滤;专门使用JsonInclude 或配置覆盖 (见ObjectMapper.configOverride(Class))。决定的特征 是否要序列化具有空值的 Map 条目 (true) 或 不是(假)。

    简单示例:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-09
      • 1970-01-01
      • 2021-08-01
      • 2018-09-18
      • 1970-01-01
      • 2020-10-08
      • 2019-02-02
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多