环境:SpringBoot3.4.2
1. 简介
在 Spring Boot 开发中,使用 JSON 数据进行交互极为频繁,无论是接收前端请求参数,还是将后端数据返回给前端,都离不开 JSON 格式的数据处理。而 Jackson 作为 Spring Boot 默认的 JSON 处理库,在对象与 JSON 的相互转换中提供了非常强大的各种功能。
然而,在实际开发中,并非对象中的所有字段都需要参与序列化(对象转 JSON)或反序列化(JSON 转对象)操作。例如,某些敏感信息如密码字段,出于安全考虑不能暴露在 JSON 中。
为了灵活控制字段在 JSON 转换中的行为,Jackson 提供了多种忽略 JSON 字段的方式。接下来,我们将详细介绍这 5 种实用的忽略 JSON 字段的方法。
2.实战案例
2.1 类级别忽略字段
我们可以使用 @JsonIgnoreProperties 注解并通过指定字段,在类级别忽略特定字段,如下示例:
@JsonIgnoreProperties(value = {"password", "idNo"})public class User {private Long id ;private String name ;private String password ;private String idNo ;private String address ;}
Controller接口
@GetMapping("/query")public User query() {return new User(1L, "Spring Boot实战案例200讲","1234567890", "1828381828225677", "四川乌鲁木齐") ;}
访问该接口,返回结果

忽略了我们配置的:password, idNo 字段。
2.2 字段级别忽略
我们还可以直接通过字段上的 @JsonIgnore 注解来忽略字段,User对象修改如下:
public class User {private Long id ;private String name ;@JsonIgnoreprivate String password ;@JsonIgnoreprivate String idNo ;private String address ;}
在需要忽略的字段上添加 @JsonIgnore 注解。
同样访问上面的接口,输出结果一样:

2.3 通过类型忽略所有字段
我们可以使用 @JsonIgnoreType 注解来忽略指定类型的所有字段。如果我们能够控制该类型,那么可以直接在该类上添加此注解:
定义Score类
@JsonIgnoreTypepublic class Score {private Long userId ;private double score ;}
在该类上我们使用了 @JsonIgnoreType 注解,当序列化时存在该类型的字段时将会被忽略。
修改User类
public class User {// ...private Score score ;}
最终运行结果

2.4 使用Filter过滤字段
该注解用于指示要使用哪个逻辑过滤器来过滤掉被标注类型(类)的属性;此注解通过声明过滤器的ID来建立关联,并且由 ObjectMapper(或其委托对象)根据ID提供匹配的过滤器。要使用的过滤器通常为 PropertyFilter 类型,并通过 ObjectMapper 进行注册。
首先,我们需要自定义 Jackson2ObjectMapperBuilderCustomizer 通过自定义该类注册过滤器,如下示例:
@Componentpublic class JsonFilterConfig implements Jackson2ObjectMapperBuilderCustomizer {@Overridepublic void customize(Jackson2ObjectMapperBuilder builder) {SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("password", "idNo");FilterProvider filters = new SimpleFilterProvider().addFilter("userFilter", theFilter);builder.filters(filters) ;}}
如上代码中,我们自定义一个 userFilter 过滤器,该过滤器会自动的过滤指定的:password,idNo 2个字段。
接下来,修改User类,如下示例:
@JsonFilter("userFilter")public class User {private Long id ;private String name ;private String password ;private String idNo ;private String address ;private Score score ;}
在类上使用 @JsonFilter 注解,并且指定了已经注册的过滤器名称 "userFilter"。
最终运行结果

2.5 @JsonView过滤字段
@JsonView 核心作用是按需控制对象属性的序列化与反序列化,通过指定视图类来筛选参与的属性,实现不同场景下(如公开/管理接口)返回数据的差异化展示,避免冗余数据传输并提升安全性。
该注解的详细使用,请查看下面这篇文章:
绝了!Spring Boot凭@JsonView注解,强大到逆天
2.6 自定义序列化器
通过继承 JsonSerializer<T> 实现自定义序列化器,重写 serialize 方法,手动控制字段输出,忽略敏感字段如 password 和 idNo,实现灵活的 JSON 序列化逻辑。
public class UserSerializer extends JsonSerializer<User> {@Overridepublic void serialize(User user, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeStartObject();gen.writeNumberField("id", user.getId());gen.writeStringField("name", user.getName());gen.writeStringField("address", user.getAddress());gen.writeEndObject();}}
完全自己控制,输出哪些字段。
修改User类
@JsonSerialize(using = UserSerializer.class)public class User {// ...}
最终运行效果

2929

被折叠的 条评论
为什么被折叠?



