java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性代码示例

 更新时间:2024年07月15日 11:09:13   作者:姚舜禹_12140  
在Java开发中我们处理JSON数据时经常会遇到空值(null)的情况,这篇文章主要给大家介绍了关于java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、使用场景

在开发过程中,有时候需要将后端数据返回前端,此时有些数据为空属性不需要返回,或者有些属性不需要返回,因此就需要处理。

二、环境准备

1、引入依赖

		<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.0</version>
        </dependency>

2、实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student{
    private Integer id;
    private String name;
    private Integer age;
    private String address;

    private BigDecimal score;

    private String className;

    private List<String> subjectList = new ArrayList<>();
}

三、示例

1、不返回空值

(1)方式

在实体类上面加上下面的注解:

@JsonInclude(JsonInclude.Include.NON_EMPTY)

(2)测试

Controller里面的方法:

    @PostMapping("/getData")
    public R getData(){
        Student student = new Student();
        student.setName("Tom");
        student.setAge(22);
        return R.ok().data("student", student);
    }

测试结果:

(3)说明

如果要对部分属性进行空值限制,分为两类:

  • 字符串、基本数据类型的设置,使用JsonInclude.Include.NON_NULL
  • 对象、数组之类的设置,使用JsonInclude.Include.NON_EMPTY
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student{
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer id;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String name;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer age;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String address;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal score;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String className;

    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<String> subjectList = new ArrayList<>();

}

2、不返回部分属性

(1)方式

实体类属性上使用注解:

@JsonIgnore
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    @JsonIgnore
    private String address;

    private BigDecimal score;

    private String className;

    private List<String> subjectList = new ArrayList<>();
}

(2)测试

Controller里面的方法:

    @PostMapping("/getData")
    public R getData(){
        Student student = new Student();
        student.setId(1001);
        student.setName("Tom");
        student.setAge(22);
        student.setAddress("浙江");
        return R.ok().data("student", student);
    }

测试结果:

四、 Jackson常用注解

1、 @JsonProperty

        此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把testPwd属性序列化为pwd,@JsonProperty(value="pwd")。

2、@JsonPropertyOrder

        作用在类上,被用来指明当序列化时需要对属性做排序,它有2个属性一个是alphabetic:布尔类型,表示是否采用字母拼音顺序排序,默认是为false,即不排序。如@JsonPropertyOrder(alphabetic=true)。

3、@JsonInclude

        是用在实体类的方法类的头上 作用是实体类的参数查询到的为null的不显示,比如说你想传一些json数据到前台,但是不想传值为null的数据,就可以使用该标签。如@JsonInclude(JsonInclude.Include.NON_NULL)

4、@JsonIgnoreProperties

        可以注明是想要忽略的属性列表如@JsonIgnoreProperties({"name","age","title"}),也可以注明过滤掉未知的属性如@JsonIgnoreProperties(ignoreUnknown=true),@JsonIgnore表示忽略当前属性。

5、@JsonFormat

        用在属性和方法上,可以方便的进行格式转换,如把Date转换为我们要的模式@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

6、@JsonUnwrapped

        当实体类中成员属性是一个类的对象时候,忽略包装。直接显示属性。

总结

到此这篇关于java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性的文章就介绍到这了,更多相关java后端返回数据去除空值或NULL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中Collections.sort排序函数用法详解

    java中Collections.sort排序函数用法详解

    本篇文章主要介绍了java中Collections.sort排序函数用法详解,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12
  • springBoot项目如何实现启动多个实例

    springBoot项目如何实现启动多个实例

    这篇文章主要介绍了springBoot项目如何实现启动多个实例的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解时间轮TimeWheel的工作原理

    详解时间轮TimeWheel的工作原理

    时间轮(TimeWheel)作为一种高效率的计时器实现方案,在1987年发表的论文Hashed and Hierarchical Timing Wheels中被首次提出。本文主要来聊聊它的工作原理,感兴趣的可以了解一下
    2023-02-02
  • 2020最新版SSM框架整合教程

    2020最新版SSM框架整合教程

    这篇文章主要介绍了2020最新版SSM框架整合教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 一篇文章大家彻底学会Java之格式化输出

    一篇文章大家彻底学会Java之格式化输出

    Java提供了多种格式化输出的方式,包括String.format()、System.out.printf()和Formatter类,这些方法支持数字、日期、字符串等多种格式化操作,这篇文章主要介绍了Java格式化输出的相关资料,需要的朋友可以参考下
    2025-04-04
  • 如何使用Spring Security手动验证用户的方法示例

    如何使用Spring Security手动验证用户的方法示例

    这篇文章主要介绍了如何使用Spring Security手动验证用户的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • java多线程教程之如何使用线程池详解

    java多线程教程之如何使用线程池详解

    这篇文章主要给大家介绍了关于java多线程之如何使用线程池的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • MyBatisPlus 暂时分页失效原因及问题解决

    MyBatisPlus 暂时分页失效原因及问题解决

    MybatisPlus升级后分页失效,因新版本PaginationInnerInterceptor中新增maxLimit限制,下面就来介绍MyBatisPlus 暂时分页失效原因及问题解决,感兴趣的可以了解一下
    2025-07-07
  • Springboot热加载JAR包的实现方法

    Springboot热加载JAR包的实现方法

    SpringBoot作为一个开发快速、部署方便的微服务框架,具有自动配置、约定优于配置的特点,能够极大地提高开发效率,它提供了丰富的扩展点,非常适合实现动态加载Jar包的功能,本文将深入探讨如何在SpringBoot应用中实现动态加载Jar包的方案,感兴趣的朋友一起看看吧
    2024-04-04
  • Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

    Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

    今天小编就为大家分享一篇关于Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论