干掉它!Spring Boot 忽略 JSON 字段的六種終極方案
環境: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 ;
@JsonIgnore
private String password ;
@JsonIgnore
private String idNo ;
private String address ;
}在需要忽略的字段上添加 @JsonIgnore 注解。
同樣訪問上面的接口,輸出結果一樣:
圖片
2.3 通過類型忽略所有字段
我們可以使用 @JsonIgnoreType 注解來忽略指定類型的所有字段。如果我們能夠控制該類型,那么可以直接在該類上添加此注解:
定義Score類
@JsonIgnoreType
public 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 通過自定義該類注冊過濾器,如下示例:
@Component
public class JsonFilterConfig implements Jackson2ObjectMapperBuilderCustomizer {
@Override
public 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 核心作用是按需控制對象屬性的序列化與反序列化,通過指定視圖類來篩選參與的屬性,實現不同場景下(如公開/管理接口)返回數據的差異化展示,避免冗余數據傳輸并提升安全性。
2.6 自定義序列化器
通過繼承 JsonSerializer<T> 實現自定義序列化器,重寫 serialize 方法,手動控制字段輸出,忽略敏感字段如 password 和 idNo,實現靈活的 JSON 序列化邏輯。
public class UserSerializer extends JsonSerializer<User> {
@Override
public 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 {
// ...
}最終運行效果:
圖片

































