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

摘要:
首先加入依赖com.google.code.gsongson方法一、实体上使用@JsonInclude(JsonInclude.Include.NON_NULL)1、如果放在属性上,如果该属性为NULL则不参与序列化;2、如果放在类上,那对这个类的全部属性起作用

首先加入依赖
<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 不序列化

使用之前

jackson实体转json时 为NULL不参加序列化的汇总第1张

使用之后

jackson实体转json时 为NULL不参加序列化的汇总第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 放在该属性

免责声明:文章转载自《jackson实体转json时 为NULL不参加序列化的汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux_配置本地YUM源(RHEL8)vitepress 发布到 gitee上的build命令 自动设置base下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c++ win32 遍历进程列表

使用 CreateToolhelp32Snapshot #include <iostream> #include <Windows.h> #include <TlHelp32.h> #include <Psapi.h> int main() { HANDLE hSnap = CreateToolhel...

protostuff的坑

1、Protostuff 序列化/反序列化集合等对象 定义一个包装类: public class SerializeDeserializeWrapper<T> { private T data; public static <T> SerializeDeserializeWrapper<T> buil...

makefile学习经验(四)编译生成动态库文件(方式二)

Lunix下生成动态库文件:          之前已经介绍了依靠makefile文件实现可执行文件,下面说下在源文件中指定加载的动态库文件; 一.   源码文件: datetime.h:  #ifndef __DATETIME_H  #define __DATETIME_H /* 日期结构 */  typedef struct  {          i...

Spring Boot 连接MySql数据库

Spring Boot 以后也许会成为入门Spring的首选! 记一下Spring Boot 成功连接Mysql数据库的方法步骤! 一、新建Maven工程,不全Maven所需文件夹,在pom.xml引入SpringBoot的依赖包!可以参照:http://www.cnblogs.com/liangblog/p/5207855.html 二、有两种方法与数据...

springboot 2 集成 redis 缓存 序列化

springboot 缓存为了实现是在数据中查询数据还是在缓存中查询数据,在application.yml 中将mybatis 对应的mapper 包日志设置为debug 。 spring: datasource: username: root password: rootpassword url: jdbc:mysql://l...

二维码登录原理及生成与解析

一、前言   这几天在研究二维码的扫码登录。初来乍到,还有好多东西不懂。在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码。一时兴起,决定自己亲手试一试。本人是通过QRCode实现的,下面具体的说一下。 二、二维码原理   基础知识参考:http://news.cnblogs.com/n/191671/   很重要的一部分知识:二维...