SSM Jackson 为NULL或者为空不参加序列化

二人セゾン

前言

遇到对象有很多属性,通过json序列化全部返给客户端。
但是一部分数据为null,同时客户端也不需要null数据。就想着怎么把为null的不参加序列化.


注解在实体类

@JsonInclude(Include.NON_NULL)

  1. 将该标记放在属性上,如果该属性为NULL则不参与序列化
  2. 如果放在类上边,那对这个类的全部属性起作用
  3. Include.Include.ALWAYS 默认
  4. Include.NON_DEFAULT 属性为默认值不序列化
  5. Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
  6. Include.NON_NULL 属性为NULL 不序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Dome{
    private Integer code;
    private String msg;
}

**@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) **

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Dome{
 private Integer code;
 private String msg;
}

JSON原来经过JACKSON转换以后{"name":"name","sex":null}
加入注解后,结果为{"name":"name"},sex节点被去掉了。


代码对象设置属性

setSerializationInclusion(Include.NON_NULL)

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

User user = new User(1,"",null); 
String outJson = mapper.writeValueAsString(user); 

System.out.println(outJson);


  1. 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
  2. Include.Include.ALWAYS 默认
  3. Include.NON_DEFAULT 属性为默认值不序列化
  4. Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
  5. Include.NON_NULL 属性为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 


总结

还有其他的方式,但是感觉在实体类直接注解轻松。具体情况看业务需求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 10,941评论 0 24
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • NSURLcache 代码: 缓存策略是由请求(客户端)和回应(服务端)分别指定。理解这些策略和他们如何相互影响,...
    麦穗0615阅读 511评论 0 1