Jackson Databind中已弃用的属性SerializationFeature.WRITE_NULL_MAP_VALUES是否可以替代?

时间:2019-12-02 09:53:48

标签: java jackson deprecated jackson-databind

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

configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false)

但是在Jackson-Databind 2.9之后,该物业已贬值,我们正在寻找其他选择。

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

setSerializationInclusion(Include.NON_NULL)

1 个答案:

答案 0 :(得分: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
}