栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何防止Map内的空值和Bean内的空字段通过Jackson序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何防止Map内的空值和Bean内的空字段通过Jackson序列化

如果合理地更改

Map
要序列化的原始数据结构以更好地表示要序列化的实际值,那可能是一个不错的方法,这可能会减少所需的Jackson配置量。例如,
null
在可能的情况下,只要致电杰克逊,就删除关键条目。那就是…


要禁止

Map
使用空值序列化条目:

杰克逊2.9之前

您仍然可以使用

WRITE_NULL_MAP_VALUES
,但请注意,它已移至
SerializationFeature

mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);

自杰克逊2.9

WRITE_NULL_MAP_VALUES
已被弃用,你可以使用下面的等价:

mapper.setDefaultPropertyInclusion(   JsonInclude.Value.construct(Include.ALWAYS, Include.NON_NULL))

要禁止使用空值序列化属性,可以直接配置

ObjectMapper
或使用
@JsonInclude
批注:

mapper.setSerializationInclusion(Include.NON_NULL);

要么:

@JsonInclude(Include.NON_NULL)class Foo{  public String bar;  Foo(String bar)  {    this.bar = bar;  }}

Map
我所知,要处理空键,必须进行一些自定义序列化。

一种将

null
键序列化为空字符串的简单方法(包括前面提到的两个配置的完整示例):

import java.io.IOException;import java.util.HashMap;import java.util.Map;import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.JsonSerializer;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import com.fasterxml.jackson.databind.SerializerProvider;public class JacksonFoo{  public static void main(String[] args) throws Exception  {    Map<String, Foo> foos = new HashMap<String, Foo>();    foos.put("foo1", new Foo("foo1"));    foos.put("foo2", new Foo(null));    foos.put("foo3", null);    foos.put(null, new Foo("foo4"));    // System.out.println(new ObjectMapper().writevalueAsString(foos));    // Exception: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)    ObjectMapper mapper = new ObjectMapper();    mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);    mapper.setSerializationInclusion(Include.NON_NULL);    mapper.getSerializerProvider().setNullKeySerializer(new MyNullKeySerializer());    System.out.println(mapper.writevalueAsString(foos));    // output:     // {"":{"bar":"foo4"},"foo2":{},"foo1":{"bar":"foo1"}}  }}class MyNullKeySerializer extends JsonSerializer<Object>{  @Override  public void serialize(Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused)       throws IOException, JsonProcessingException  {    jsonGenerator.writeFieldName("");  }}class Foo{  public String bar;  Foo(String bar)  {    this.bar = bar;  }}

为了禁止

Map
使用
null
键序列化条目,将需要进一步的自定义序列化处理。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437137.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号