jackson 实体转json属性为NULL或者为空不参加序列化

jackson实体转json时 为NULL不参加序列化的汇总,jacksonjson

首先加入依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>

方法一、实体上使用 @JsonInclude(JsonInclude.Include.NON_NULL)

1、如果放在属性上,如果该属性为NULL则不参与序列化 ;
2、如果放在类上,那对这个类的全部属性起作用 ;







参数意义:
JsonInclude.Include.ALWAYS              默认 
JsonInclude.Include.NON_DEFAULT     属性为默认值不序列化
JsonInclude.Include.NON_EMPTY         属性为 空(””) 或者为 NULL 都不序列化 
JsonInclude.Include.NON_NULL           属性为NULL   不序列化

使用之前

图片 1

使用之后

图片 2

方法二、 如果不想每次都这样添加,可以在application.yml配置全局定义,
这种默认都生效

spring:

   jackson:

        default-property-inclusion: non_null

 

方法三、通过ObjectMapper 对象进行设置,下面是测试用例

@Test
public  void  test() throws JsonProcessingException {
    ResultVo resultVo = new ResultVo();
    resultVo.setCode(0);
    resultVo.setMsg("成功");

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);//默认
    String json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //属性为NULL不序列化
    json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    Map map = new HashMap();
    map.put("code",0);
    map.put("msg","成功");
    map.put("data",null);
    json = mapper.writeValueAsString(map);
    System.out.println(json);
}

打印如下:

{"code":0,"msg":"成功","data":null}
 {"code":0,"msg":"成功"}
 {"msg":"成功","code":0,"data":null}

注意:ObjectMapper 只对VO起作用;对Map List不起作用

 

1、如果必定返回的字段,可以在实体类一开始就给默认值(如字符串 ”” ; list
[] ),来避免null

2、jackson实体转json时,某个属性不参加序列化时 使用@JsonIgnore
放在该属性上

 

 

 

为NULL不参加序列化的汇总,jacksonjson 首先加入依赖 dependency
groupIdcom.google.code.gson/groupId artifactIdgson/artifactId
/dependency 方法…

首先加入依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>

首先加入依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>

1.实体上

jackson 实体转json属性为NULL或者为空不参加序列化

1.实体上

@JsonInclude(Include.NON_NULL)

//将该标记放在属性上,如果该属性为NULL则不参与序列化
//如果放在类上边,那对这个类的全部属性起作用
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化

2.代码上
ObjectMapper mapper = new ObjectMapper();

mapper.setSerializationInclusion(Include.NON_NULL);

//通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化

User user = new User(1,””,null);
String outJson = mapper.writeValueAsString(user);
System.out.println(outJson);

jackson 实体转json 属性直接不参加序列化


@JsonIgnore

private int id;

实体转json属性为NULL或者为空不参加序列化
1.实体上 @JsonInclude(Include.NON_NULL)
//将该标记放在属性上,如果该属性为NULL则不参与序列化…

方法一、实体上使用 @JsonInclude(JsonInclude.Include.NON_NULL)

方法一、实体上使用 @JsonInclude(JsonInclude.Include.NON_NULL)

@JsonInclude(Include.NON_NULL) 

1、如果放在 style=”color: #ff0000″>属性上,如果该属性为NULL则不参与序列化
;
2、如果放在 style=”color: #ff0000″>类上,那对这个类的全部属性起作用
;

参数意义:

JsonInclude.Include.ALWAYS             
默认

JsonInclude.Include.NON_DEFAULT    
属性为默认值不序列化

JsonInclude.Include.NON_EMPTY        
属性为 空(””) 或者为 NULL 都不序列化

JsonInclude.Include.NON_NULL          
属性为NULL   不序列化

1、如果放在 style=”color: #ff0000″>属性上,如果该属性为NULL则不参与序列化
;
2、如果放在 style=”color: #ff0000″>类上,那对这个类的全部属性起作用
;

参数意义:

JsonInclude.Include.ALWAYS             
默认

JsonInclude.Include.NON_DEFAULT    
属性为默认值不序列化

JsonInclude.Include.NON_EMPTY        
属性为 空(””) 或者为 NULL 都不序列化

JsonInclude.Include.NON_NULL          
属性为NULL   不序列化

//将该标记放在属性上,如果该属性为NULL则不参与序列化 
//如果放在类上边,那对这个类的全部属性起作用 
//Include.Include.ALWAYS 默认 
//Include.NON_DEFAULT 属性为默认值不序列化 
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 
//Include.NON_NULL 属性为NULL 不序列化 

使用之前

使用之前

2.代码上
ObjectMapper mapper = new ObjectMapper();

图片 3

图片 3

mapper.setSerializationInclusion(Include.NON_NULL);  

使用之后

使用之后

*//通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 
//Include.Include.ALWAYS 默认 
//Include.NON_DEFAULT 属性为默认值不序列化 
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 
//Include.NON_NULL 属性为NULL 不序列化 

图片 5

图片 5

User user = new User(1,””,null); 
String outJson = mapper.writeValueAsString(user); 
System.out.println(outJson);*

方法二、
如果不想每次都这样添加,可以在application.yml配置全局定义,
这种默认都生效

方法二、
如果不想每次都这样添加,可以在application.yml配置全局定义,
这种默认都生效

 

spring:

   jackson:

        default-property-inclusion: non_null
spring:

   jackson:

        default-property-inclusion: non_null

注意:只对VO起作用,Map List不起作用

 

 

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);

Map map = new HashMap();
map.put("a", null);
map.put("b", "b");

String ret_val = mapper.writeValueAsString(map);
System.err.println(ret_val);
Map m = mapper.readValue(ret_val, Map.class);
System.err.println(m.get("a") + "|" + m.get("b"));
输出:
{"b":"b","a":null}
null|b

VO vo = new VO();
vo.setA(null);
vo.setB("b");

String ret_val1 = mapper.writeValueAsString(vo);
System.err.println(ret_val1);
VO v = mapper.readValue(ret_val1, VO.class);
System.err.println(v.getA() + "|" + v.getB());<br>
输出
{"b":"b"}
|b

方法三、通过ObjectMapper
对象进行设置,下面是测试用例

方法三、通过ObjectMapper
对象进行设置,下面是测试用例

 

@Test
public  void  test() throws JsonProcessingException {
    ResultVo resultVo = new ResultVo();
    resultVo.setCode(0);
    resultVo.setMsg("成功");

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);//默认
    String json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //属性为NULL不序列化
    json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    Map map = new HashMap();
    map.put("code",0);
    map.put("msg","成功");
    map.put("data",null);
    json = mapper.writeValueAsString(map);
    System.out.println(json);
}
@Test
public  void  test() throws JsonProcessingException {
    ResultVo resultVo = new ResultVo();
    resultVo.setCode(0);
    resultVo.setMsg("成功");

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);//默认
    String json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //属性为NULL不序列化
    json = mapper.writeValueAsString(resultVo);
    System.out.println(json);

    Map map = new HashMap();
    map.put("code",0);
    map.put("msg","成功");
    map.put("data",null);
    json = mapper.writeValueAsString(map);
    System.out.println(json);
}

打印如下:

打印如下:

{"code":0,"msg":"成功","data":null}
 {"code":0,"msg":"成功"}
 {"msg":"成功","code":0,"data":null}
{"code":0,"msg":"成功","data":null}
 {"code":0,"msg":"成功"}
 {"msg":"成功","code":0,"data":null}

注意:ObjectMapper 只对VO起作用;对Map
List不起作用

注意:ObjectMapper 只对VO起作用;对Map
List不起作用

 

 

1、如果必定返回的字段,可以在实体类一开始就给默认值(如字符串
”” ; list [] ),来避免null

1、如果必定返回的字段,可以在实体类一开始就给默认值(如字符串
”” ; list [] ),来避免null

2、jackson实体转json时,某个属性不参加序列化时
使用@JsonIgnore 放在该属性上

2、jackson实体转json时,某个属性不参加序列化时
使用@JsonIgnore 放在该属性上

 

 

 

 

 

 

相关文章