@JsonInclude注解

本文介绍如何在SpringBoot中使用@JsonInclude注解或配置文件过滤JSON中空值属性,提高数据传输效率。

1.使用@JsonInclude(JsonInclude.Include.NON_NULL)注解 

可以返回制定格式的json数据  : 如果属性返回值为空,则不返回任何内容,这是由于

@JsonInclude(JsonInclude.Include.NON_NULL)这个注解产生的

本注解是从废弃的注解中提升的 

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)

2.当然在springboot中也可以使用配置文件的方式进行过滤属性的空值,代码如下:

#此在配置文件就如同注解一般, 起到异曲同工之妙
spring: 
    jackson:
        default-property-inclusion: non_null

3. 代码示例演示:

package com.zpjeck.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.zpjeck.entity.OrderDetail;
import com.zpjeck.util.serialize.Data2LongSerialize;
import lombok.Data;
import lombok.Value;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO {

    /** 订单id. */
    private String orderId;

    /** 买家名字. */
    private String buyerName;

    /** 买家手机号. */
    private String buyerPhone;

    /** 买家地址. */
    private String buyerAddress;

    /** 买家微信Openid. */
    private String buyerOpenid;

    /** 订单总金额. */
    private BigDecimal orderAmount;

    /** 订单状态, 默认为0新下单. */
    private Integer orderStatus ;

    /** 支付状态, 默认为0未支付. */
    private Integer payStatus;

    /** 创建时间. */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createTime;

    /** 更新时间. */
    //更换成时间戳  精进版
    @JsonSerialize(using = Data2LongSerialize.class)
    private Date updateTime;

    List<OrderDetail> orderDetailList;
}

演示结果

 

### @JsonInclude 注解的详细用法 #### 一、引言 在现代Web应用程序中,JSON作为一种轻量级的数据交换格式,被广泛用于前后端之间的数据传输。为了更好地控制对象到JSON字符串以及反之的过程,Jackson库提供了一系列注解[@^3]。 #### 二、@JsonInclude 注解概述 `@JsonInclude` 是 Jackson 提供的一个重要注解,主要用于指定如何处理那些可能为空或具有默认值的对象属性,在序列化过程中决定是否忽略这些字段【^4】。此注解可以应用于类级别或者方法/字段级别,并接受不同的策略选项来定制行为【^1】。 #### 参数介绍 该注解支持多种枚举类型的参数设置,最常用的有: - `NON_NULL`: 只当字段不为 null 时才包含; - `NON_ABSENT`: 对于 Optional 类型来说只有存在实际值才会加入 JSON 结果里; - `NON_DEFAULT`: 排除基本类型采用其零值(如 int=0, boolean=false),对于 String 则是非空白串之外的情况都将保留; - `ALWAYS`: 总是写出所有声明过的成员变量,不论它们是否有赋过新值得情况发生; 特别提到的是 `NON_EMPTY`, 它不仅会排除null值还会过滤掉集合长度为0 或者 字符串trim()后length等于0的情形【^2】 ```java import com.fasterxml.jackson.annotation.JsonInclude; import java.util.List; // 示例:仅当列表中有元素时不将其省略 @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Example { private List<String> items; // getter and setter... } ``` #### 三、具体应用场景 假设有一个用户模型User,希望在转换成json的时候如果某些字段为空则不在最终的结果集中显示出来,则可以在对应的bean上面加上相应的配置即可实现这样的需求【^2】: ```java package cn.example.model; import com.fasterxml.jackson.annotation.JsonInclude; // 当 user.name == null || "".equals(user.getName().trim()) 将不会出现在 json 中 @JsonInclude(JsonInclude.Include.NON_EMPTY) public class User { private String name; // other fields... // getters & setters ... } ``` 以上就是关于 `@JsonInclude` 注解较为全面的讲解及其简单应用案例说明了。通过合理运用这个特性可以帮助开发者更灵活地管理API返回给客户端的信息结构,从而提高系统的性能并减少不必要的网络流量开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值