偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

干掉它!Spring Boot 忽略 JSON 字段的六種終極方案

開(kāi)發(fā) 前端
在 Spring Boot 開(kāi)發(fā)中,使用 JSON 數(shù)據(jù)進(jìn)行交互極為頻繁,無(wú)論是接收前端請(qǐng)求參數(shù),還是將后端數(shù)據(jù)返回給前端,都離不開(kāi) JSON 格式的數(shù)據(jù)處理。而 Jackson 作為 Spring Boot 默認(rèn)的 JSON 處理庫(kù),在對(duì)象與 JSON 的相互轉(zhuǎn)換中提供了非常強(qiáng)大的各種功能。

環(huán)境:SpringBoot3.4.2

1. 簡(jiǎn)介

在 Spring Boot 開(kāi)發(fā)中,使用 JSON 數(shù)據(jù)進(jìn)行交互極為頻繁,無(wú)論是接收前端請(qǐng)求參數(shù),還是將后端數(shù)據(jù)返回給前端,都離不開(kāi) JSON 格式的數(shù)據(jù)處理。而 Jackson 作為 Spring Boot 默認(rèn)的 JSON 處理庫(kù),在對(duì)象與 JSON 的相互轉(zhuǎn)換中提供了非常強(qiáng)大的各種功能。

然而,在實(shí)際開(kāi)發(fā)中,并非對(duì)象中的所有字段都需要參與序列化(對(duì)象轉(zhuǎn) JSON)或反序列化(JSON 轉(zhuǎn)對(duì)象)操作。例如,某些敏感信息如密碼字段,出于安全考慮不能暴露在 JSON 中。

為了靈活控制字段在 JSON 轉(zhuǎn)換中的行為,Jackson 提供了多種忽略 JSON 字段的方式。接下來(lái),我們將詳細(xì)介紹這 5 種實(shí)用的忽略 JSON 字段的方法。

2.實(shí)戰(zhàn)案例

2.1 類(lèi)級(jí)別忽略字段

我們可以使用 @JsonIgnoreProperties 注解并通過(guò)指定字段,在類(lèi)級(jí)別忽略特定字段,如下示例:

@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實(shí)戰(zhàn)案例200講", 
    "1234567890", "1828381828225677", "四川烏魯木齊") ;
}

訪問(wèn)該接口,返回結(jié)果

圖片

忽略了我們配置的:password, idNo 字段。

2.2 字段級(jí)別忽略

我們還可以直接通過(guò)字段上的 @JsonIgnore 注解來(lái)忽略字段,User對(duì)象修改如下:

public class User {
  private Long id ;
  private String name ;
  @JsonIgnore
  private String password ;
  @JsonIgnore
  private String idNo ;
  private String address ;
}

在需要忽略的字段上添加 @JsonIgnore 注解。

同樣訪問(wèn)上面的接口,輸出結(jié)果一樣:

圖片圖片

2.3 通過(guò)類(lèi)型忽略所有字段

我們可以使用 @JsonIgnoreType 注解來(lái)忽略指定類(lèi)型的所有字段。如果我們能夠控制該類(lèi)型,那么可以直接在該類(lèi)上添加此注解:

定義Score類(lèi)

@JsonIgnoreType
public class Score {
  private Long userId ;
  private double score ;
}

在該類(lèi)上我們使用了 @JsonIgnoreType 注解,當(dāng)序列化時(shí)存在該類(lèi)型的字段時(shí)將會(huì)被忽略。

修改User類(lèi)

public class User {
  // ...
  private Score score ;
}

最終運(yùn)行結(jié)果

圖片圖片

2.4 使用Filter過(guò)濾字段

該注解用于指示要使用哪個(gè)邏輯過(guò)濾器來(lái)過(guò)濾掉被標(biāo)注類(lèi)型(類(lèi))的屬性;此注解通過(guò)聲明過(guò)濾器的ID來(lái)建立關(guān)聯(lián),并且由 ObjectMapper(或其委托對(duì)象)根據(jù)ID提供匹配的過(guò)濾器。要使用的過(guò)濾器通常為 PropertyFilter 類(lèi)型,并通過(guò) ObjectMapper 進(jìn)行注冊(cè)。

首先,我們需要自定義 Jackson2ObjectMapperBuilderCustomizer 通過(guò)自定義該類(lèi)注冊(cè)過(guò)濾器,如下示例:

@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) ;
  }
}

如上代碼中,我們自定義一個(gè) userFilter 過(guò)濾器,該過(guò)濾器會(huì)自動(dòng)的過(guò)濾指定的:password,idNo 2個(gè)字段。

接下來(lái),修改User類(lèi),如下示例:

@JsonFilter("userFilter")
public class User {
  private Long id ;
  private String name ;
  private String password ;
  private String idNo ;
  private String address ;
  private Score score ;
}

在類(lèi)上使用 @JsonFilter 注解,并且指定了已經(jīng)注冊(cè)的過(guò)濾器名稱(chēng) "userFilter"。

最終運(yùn)行結(jié)果

圖片圖片

2.5 @JsonView過(guò)濾字段

@JsonView 核心作用是按需控制對(duì)象屬性的序列化與反序列化,通過(guò)指定視圖類(lèi)來(lái)篩選參與的屬性,實(shí)現(xiàn)不同場(chǎng)景下(如公開(kāi)/管理接口)返回?cái)?shù)據(jù)的差異化展示,避免冗余數(shù)據(jù)傳輸并提升安全性。

2.6 自定義序列化器

通過(guò)繼承 JsonSerializer<T> 實(shí)現(xiàn)自定義序列化器,重寫(xiě) serialize 方法,手動(dòng)控制字段輸出,忽略敏感字段如 password 和 idNo,實(shí)現(xiàn)靈活的 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類(lèi)

@JsonSerialize(using = UserSerializer.class)
public class User {
  // ...
}

最終運(yùn)行效果:

圖片圖片


責(zé)任編輯:武曉燕 來(lái)源: Springboot全家桶實(shí)戰(zhàn)案例
相關(guān)推薦

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2025-05-06 00:00:05

MySQLES協(xié)同

2025-05-19 00:02:00

數(shù)據(jù)脫敏加密算法數(shù)據(jù)庫(kù)

2025-10-28 01:25:00

SQL查詢(xún)Spring查詢(xún)模式

2019-01-17 10:58:52

JS異步編程前端

2022-12-06 10:39:43

Spring事務(wù)失效

2024-08-30 11:11:01

2025-08-07 02:11:00

2022-05-24 10:43:02

延時(shí)消息分布式MQ

2025-01-02 08:21:32

2025-03-17 08:07:11

2023-11-14 18:07:44

Python字典項(xiàng)目

2024-10-12 08:18:21

Spring接口組件

2010-03-15 17:12:52

Python字典

2024-12-18 16:19:51

2020-10-14 09:00:00

SAST漏洞攻擊

2025-05-27 01:44:00

2024-10-14 13:26:42

2011-06-07 09:36:18

2012-10-15 13:26:31

云計(jì)算架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)