国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

別再用 toString() 了!Spring Boot + Jackson 處理枚舉的七種方式

開發 前端
在系統開發中,JSON 作為輕量級數據交換格式被廣泛應用,而枚舉(Enum)作為 Java 等語言中表示固定常量集合的類型,其與 JSON 的交互處理至關重要。

環境:SpringBoot3.4.2

1. 簡介

在系統開發中,JSON 作為輕量級數據交換格式被廣泛應用,而枚舉(Enum)作為 Java 等語言中表示固定常量集合的類型,其與 JSON 的交互處理至關重要。傳統場景下,枚舉序列化可能直接輸出其名稱(如 "MALE"),但實際業務中常需更靈活的映射,例如輸出數字代碼(1)或國際化描述("男")。同時,反序列化時需根據 JSON 值(如數字或字符串)精準匹配枚舉實例。

本篇文章將詳細介紹枚舉值在序列化和反序列化過程中的核心處理機制、常見應用場景及最佳實踐方案。

2.實戰案例

2.1 準備環境

定義性別枚舉類
public enum Gender {
  UNKNOWN(0, "未知的性別"), MALE(1, "男"), FEMALE(2, "女"), UNSTATED(9, "未說明的性別");
  private final int code;
  private final String name;
  Gender(int code, String name) {
    this.code = code;
    this.name = name;
  }
  public int getCode() {
    return code ;
  }
  public String getName() {
    return name ;
  }
}
定義User實體對象包括上面的枚舉字段
public record User(String name, int age, Gender gender) {
}

2.2 默認輸出枚舉值

@RestController
@RequestMapping("/users")
public class UserController {
  @GetMapping
  public ResponseEntity<User> query() {
    return ResponseEntity.ok(new User("Pack_xg", 33, Gender.MALE)) ;
  }
}

輸出結果

圖片

2.3 將枚舉序列化為JSON對象

當我們希望將枚舉值序列化為如下格式:

{"code": 1, "name": "男"}

要輸出此格式,我們可以通過如下注解進行標注枚舉類:

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Gender {
  // ...
}

輸出結果

圖片圖片

2.4 枚舉與@JsonValue結合

控制枚舉序列化輸出的另一種簡單方法是在 getter 方法上使用 @JsonValue 注解。該注解用于指示被注解的訪問器(字段或“getter”方法[非void返回類型、無參數的方法])的值應作為該實例的單一值進行序列化,而非采用常規的收集屬性值的方式。

修改枚舉類如下:

public enum Gender {
  // ...
  @JsonValue
  public String getName() {
    return name;
  }
}

在我們希望輸出的字段上使用@JsonValue注解。

輸出結果

圖片圖片

當我們將@JsonValue使用到類中的toString時,如下:

public record User(String name, int age, Gender gender) {
  @JsonValue
  public String toString() {
    return "【name = " + this.name + ", age = " + this.age + ", gender = " + this.gender + "】";
  }
}

輸出結果

圖片圖片

2.5 自定義枚舉序列化

我們可以通過繼承 StdSerializer 的方式,實現自定義的序列化方式,如下示例:

public class GenderSerializer extends StdSerializer<Gender> {
  public GenderSerializer() {
    super(Gender.class);
  }
  public GenderSerializer(Class<Gender> t) {
    super(t);
  }
  public void serialize(Gender value, JsonGenerator generator, SerializerProvider provider)
      throws IOException, JsonProcessingException {
    generator.writeStartObject() ;
    generator.writeFieldName("label") ;
    generator.writeString(value.name()) ;
    generator.writeFieldName("value") ;
    generator.writeNumber(value.getCode()) ;
    generator.writeEndObject();
  }
}

接著修改Gender枚舉類

@JsonSerialize(using = GenderSerializer.class)
public enum Gender {}

輸出結果

圖片圖片

2.6 反序列化枚舉

@PostMapping
public ResponseEntity<User> save(@RequestBody User user) {
  return ResponseEntity.ok(user) ;
}
默認情況

圖片圖片

我們修改gender值為數字也同樣可以,如下:

圖片圖片

使用@JsonValue
public enum Gender {
  @JsonValue
  public int getCode() {
    return code;
  }
}
輸出結果

圖片圖片

這時候你再換成枚舉的字面量值將會報錯,如下:

圖片圖片

使用@JsonProperty

通過使用此注解,我們只是告訴Jackson將@JsonProperty的值映射到標注此值的對象。如下示例:

修改枚舉類
public enum Gender {
  @JsonProperty("unknow")
  UNKNOWN(0, "未知的性別"),
  @JsonProperty("male")
  MALE(1, "男"), 
  @JsonProperty("female")
  FEMALE(2, "女"), 
  @JsonProperty("unknow_gender")
  UNSTATED(9, "未說明的性別");
}
輸出結果

圖片圖片

圖片圖片

使用@JsonCreator

該注解用于將構造函數或工廠方法定義為用于實例化關聯類新實例的指定方法。

修改枚舉類如下:

public enum Gender {
  // ...
  @JsonCreator
  public Gender fromCode(@JsonProperty("gender") int code) {
    for (Gender gender : Gender.values()) {
      if (gender.code == code) {
        return gender;
      }
    }
    throw new IllegalArgumentException("無效的性別代碼: " + code);
  }
}
輸出結果

圖片圖片

自定義反序列化
定義反序列化類
public class GenderDeserializer extends StdDeserializer<Gender> {
  public GenderDeserializer() {
    super(Gender.class) ;
  }
  @Override
  public Gender deserialize(JsonParser jsonParser, DeserializationContext ctxt)
      throws IOException, JsonProcessingException {
    int gender = jsonParser.getValueAsInt() ;
    for (Gender g : Gender.values()) {
      if (g.getCode() == gender) {
        return g ;
      }
    }
    return null;
  }
}
修改枚舉類
@JsonDeserialize(using = GenderDeserializer.class)
public enum Gender {}

輸出結果

圖片圖片

責任編輯:武曉燕 來源: Springboot全家桶實戰案例
相關推薦

2013-01-07 10:14:06

JavaJava枚舉

2025-08-04 01:55:00

2025-12-04 08:04:12

限流開發IP地址

2025-01-21 08:00:00

限流微服務算法

2022-03-11 12:31:04

Vue3組件前端

2017-06-14 16:44:15

JavaScript原型模式對象

2025-11-03 04:00:00

2025-06-04 02:10:00

2018-06-10 16:31:12

2020-12-02 11:18:50

print調試代碼Python

2024-10-08 09:06:01

Spring應用程序配置

2025-08-13 03:00:00

2025-05-19 04:00:00

2022-07-01 08:00:44

異步編程FutureTask

2025-02-03 09:00:00

API接口性能

2024-01-04 12:48:00

Spring

2022-12-23 10:55:09

CIO方式團隊

2020-12-04 10:05:00

Pythonprint代碼

2025-04-08 08:01:31

2025-05-13 08:20:58

點贊
收藏

51CTO技術棧公眾號

www高清在线视频日韩欧美| 丝袜美腿综合| 国产九九九九九| 国产mv久久久| 欧美一区二区三区四区久久| 韩国精品久久久| 国产探花一区二区| 男男gaygays亚洲| 宅男噜噜噜66国产免费观看| 精品国产一区二区三区四区精华| 日韩视频第一页| 日韩欧美一区二区视频| 免费视频最近日韩| 亚洲日本三级| 波多野结衣亚洲| 国产一级免费在线观看| 999精品视频在线| 欧美精品亚洲精品| 91精品在线国产| 日韩欧美国产视频| 中文一区在线播放| 高清免费成人av| 成人av电影在线观看| 国产中文欧美日韩在线| 超碰91在线观看| 日本美女高清在线观看免费| 亚洲成人亚洲激情| 亚洲欧美激情一区二区| 美国欧美日韩国产在线播放| 在线不卡欧美| 亚洲精品欧美| 国产日韩欧美一区二区三区| va天堂va亚洲va影视| 国产精品美女午夜爽爽| 超碰在线无需免费| 黄色在线观看网| 欧美女子与性| 国产在线观看黄| 久艹视频在线免费观看| 成人黄色激情网| 国产91对白在线播放| 国产精品亚洲精品| 中文字幕精品—区二区| 亚洲国产人成综合网站| 99re视频精品| xfplay精品久久| 欧美国产精品中文字幕| 久久精品夜夜夜夜久久| 亚洲欧美日韩中文字幕一区二区三区| 精品白丝av| 国产自产v一区二区三区c| 国产乱码精品一区二区三 | 日韩欧美高清在线| 久久一区二区视频| 日本一区二区三区四区在线视频| 成人动漫在线一区| 一区二区三区在线观看网站| 91老师国产黑色丝袜在线| 国产一区美女在线| 91在线码无精品| 欧美日韩亚洲天堂| 日韩一级完整毛片| 九九视频这里只有精品| 国产又爽又黄的激情精品视频| 国产伦精品一区二区| 亚洲aaaaaa| 国产精品在线看| 91青草视频久久| 国产日产欧美一区二区| www.xxx亚洲| 日本免费中文字幕在线| fc2在线中文字幕| 久久久久久久性潮| 成人影视亚洲图片在线| 成人毛片视频在线观看| 99久久精品国产网站| 国产欧美精品国产国产专区| 一本一本久久a久久精品综合麻豆| 亚洲国产精品电影| 色与欲影视天天看综合网| 国产精品久久二区| 精品乱码一区二区三区| 丁香六月激情婷婷| 可以在线观看的av| 欧美另类激情| 亚洲国产电影| 一区二区免费在线播放| 日韩午夜在线观看| 国产精品jizz在线观看麻豆| 久久9精品区-无套内射无码| 污污的视频在线观看| 性xxxx欧美老肥妇牲乱| 久久综合视频网| 精品高清美女精品国产区| 午夜免费在线观看精品视频| 色综合久久久久久久久五月| www99热| 台湾天天综合人成在线| 国产真实精品久久二三区| 超碰在线视屏| 在线欧美不卡| 国产精品久久毛片a| 亚洲精品www久久久久久广东| 91福利视频导航| 日本一本视频| 久久狠狠久久| 日韩国产在线观看一区| 日本一区二区三区四区| 亚洲深夜福利视频| 国产欧美在线播放| 婷婷综合影院| 西野翔中文久久精品国产| 国产午夜精品在线观看| 久久亚洲一区二区三区四区五区高| 国产综合中文字幕| 日韩av黄色| av网站免费线看精品| 久久综合电影一区| 精品国产乱码久久久久软件| 欧洲亚洲精品视频| 国产精品日韩久久久| 亚洲一区二区三区自拍| 国产999在线观看| 在线看你懂得| 久久久久国产精品一区二区| 欧美性猛交xxxx乱大交极品| 国产主播一区二区三区四区| av网站无病毒在线| 国内精品第一页| 最新国产精品亚洲| 久久这里只有精品23| 美女呻吟一区| 欧美在线一区视频| 精品福利视频导航大全| 中文字幕欧美区| 中文字幕日韩视频| 在线电影看在线一区二区三区| 久草热视频在线观看| 成人福利片在线| 亚洲国产精品久久久男人的天堂| 免费中文日韩| a级日韩大片| 亚洲精品wwwww| 亚洲天堂二区| 久久久久久免费毛片精品| 日韩精彩视频| 97精品一区| 91国内揄拍国内精品对白| 91黄色在线| 色综合久久88色综合天天| 国产一区二区免费在线观看| 女人让男人操自己视频在线观看 | 欧美日韩视频不卡| 国产精品久久国产| 国产色综合网| 国产极品jizzhd欧美| 在线高清av| 欧美婷婷六月丁香综合色| 亚洲熟妇无码一区二区三区| 综合国产在线| 91极品女神在线| 成人不卡视频| 亚洲第一区中文99精品| 99re热久久这里只有精品34| 久久九九久久九九| 国产福利片一区二区| 欧美日韩国产高清| 川上优av一区二区线观看 | 欧美精品18| 国产91ⅴ在线精品免费观看| av日韩久久| 欧美成人精品1314www| 免费在线看黄| 精品久久久久久亚洲国产300| 国产一区二区在线免费播放| av中文字幕不卡| 国产内射老熟女aaaa| 国产一区在线观看麻豆| 黄色一级大片免费| av高清久久久| 欧美日韩aaa| 在线观看黄av| 91麻豆精品国产91久久久使用方法 | 日韩亚洲视频在线观看| 亚洲va天堂va国产va久| 三级无遮挡在线观看| 亚洲精品ww久久久久久p站| 国产一区二区在线视频播放| 日韩avvvv在线播放| 91精品国产综合久久久久久丝袜 | 日韩av在线直播| 欧美aaa大片视频一二区| 亚洲国产精品人人爽夜夜爽| 亚洲黄色av网址| 一区二区三区韩国免费中文网站| 国产一区二区伦理| 国产一区欧美二区| 九九久久久久99精品| 24小时免费看片在线观看| 69av一区二区三区|