Spring:SpringBoot项目中忽略某属性返回给前端

文章目录

一、忽略实体类中的属性

1、@JsonIgnore

@JsonIgnore注解是Jackson库中的一个注解,用于在实体类向前台返回数据时忽略不想传递给前台的属性或接口。当你在Java类的某个属性或方法上添加@JsonIgnore注解时,Jackson在将对象序列化为JSON时将会忽略这个属性或方法,也就是说这个属性或方法将不会出现在生成的JSON字符串中。这对于那些你不希望暴露给前端的属性(如密码、敏感信息等)非常有用。

例如,在User类中,如果你有一个password属性,并且你不希望在前台看到这个属性,你可以在password属性上添加@JsonIgnore注解。

此外,还有一个类似的注解叫做@JsonIgnoreProperties,这是一个类注解,用于在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。你可以在类上添加这个注解,并指定要忽略的属性名列表。

需要注意的是,如果在使用fastJson而不是Jackson作为JSON处理库,那么@JsonIgnore注解可能不会生效。在fastJson中,你需要使用@JSONField(serialize = false)注解来达到相同的效果。

2、@JSONField(serialize = false)

@JSONField注解是阿里巴巴fastjson库中的注解,用于控制Java对象与JSON字符串之间的转换。它可以用于控制序列化和反序列化过程中的一些细节,例如日期格式、序列化顺序、字段名称等。

@JSONField注解可以作用在方法、属性以及方法中的参数上。在JSONField注解中,name属性用来指定JSON串中key的名称。例如,@JSONField(name = "id")表示将Java对象中的userId字段映射到JSON字符串中的"id"字段。

此外,@JSONField注解还有其他一些常用的属性,如:

  • format:用于指定日期或数字的格式。例如,@JSONField(format = "yyyy-MM-dd HH:mm:ss")表示将Java对象中的createTime字段按照指定的日期格式转换为JSON字符串。
  • serialize:用于指定是否序列化某个字段。例如,@JSONField(serialize = false)表示不序列化某个字段。
  • ordinal:用于指定序列化顺序,数值越小越先序列化。

通过使用@JSONField注解,你可以灵活地控制Java对象与JSON字符串之间的转换,实现更复杂的序列化和反序列化需求。

3、@JsonInclude

@JsonInclude 是 Jackson 库中的一个注解,它用于定制在序列化(即将 Java 对象转换为 JSON 字符串)过程中哪些属性应该被包含在内。这个注解可以用于类、方法或字段,以定义如何包含字段值。

Jackson 提供了几种不同的 Include 策略:

  • JsonInclude.Include.ALWAYS:始终包含属性,无论其值是什么。
  • JsonInclude.Include.NON_ABSENT:包含非空的(non-absent)属性。这相当于 NON_NULL(非空)加上非空集合、非空映射等。
  • JsonInclude.Include.NON_DEFAULT:包含其值不等于字段默认值的属性。这需要注意,对于基本数据类型(如 int、long 等),它们的默认值通常是 0 或 false,而对于包装类型(如 Integer、Long 等),默认值是 null。
  • JsonInclude.Include.NON_EMPTY:对于字符串,只包含非空字符串;对于集合、数组和映射,只包含非空集合。
  • JsonInclude.Include.NON_NULL:只包含非空(non-null)属性。
  • JsonInclude.Include.CUSTOM:使用自定义的包含策略。

例如,如果你有一个类并且你只想在序列化时包含非空的字段,你可以这样做:

bash 复制代码
import com.fasterxml.jackson.annotation.JsonInclude;  
  
@JsonInclude(JsonInclude.Include.NON_NULL)  
public class MyObject {  
    private String name;  
    private Integer age;  
  
    // getters and setters  
}

在这个例子中,如果 name 或 age 字段的值为 null,那么在序列化 MyObject 的实例为 JSON 字符串时,这些字段将不会被包含在内。

这个注解非常有用,因为它可以帮助你控制生成的 JSON 字符串的大小和可读性,尤其是在你有很多可选字段或嵌套对象的情况下。

二、忽略实体类中的方法返回值

@Transient注解是Java EE规范提供的javax.persistence包定义的注解之一。这个注解的作用是指定该属性或字段不是永久的,即告诉MyBatis不需要将该字段映射为数据库表的列,也就是标记实体类中不需要持久化到数据库的字段。

@Transient注解的使用不仅限于实体类上有@Table注解的属性,它可以用在任何实体类的字段或者方法上。无论实体类是否有@Table注解,只要被@Transient注解标记的字段或方法都会被忽略,不进行数据库映射操作。

此外,@Transient注解也可以用于Java序列化过程中,用于标记不希望序列化的字段。当对象被序列化时,被标记为@Transient的字段将被忽略。

总的来说,@Transient注解的主要作用是在Java EE的持久化和序列化过程中,告诉系统哪些字段或属性不需要被处理。

bash 复制代码
@Data
public class ResourceParam {
  
    private String field1;

  
    private String field2;

   
    private String field3;

    @Transient
    public String getTest() {
        return "string";
    }
}
相关推荐
阁阁下9 分钟前
springcloud configClient获取configServer信息失败导致启动configClient注入失败报错解决
后端·spring·spring cloud
whisperrr.33 分钟前
【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean
xml·java·spring
天上掉下来个程小白42 分钟前
HttpClient-03.入门案例-发送POST方式请求
java·spring·httpclient·苍穹外卖
robin_suli1 小时前
Spring事务的传播机制
android·java·spring
暮乘白帝过重山3 小时前
Singleton和Prototype的作用域与饿汉式/懒汉式的初始化方式
spring·原型模式·prototype·饿汉式·singleton·懒汉式
ejinxian3 小时前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之3 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码4 小时前
Spring Task 定时任务
java·前端·spring
爱的叹息4 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
松韬5 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存