精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

再也不用為 JSON 結構頭疼!Spring Boot 一招解決字段適配噩夢

開發 前端
在 Spring Boot 的世界里,JSON 適配不應再是噩夢。? 掌握這些技巧,你將能夠優雅地駕馭任意結構的數據,? 讓系統在需求變更的浪潮中依舊保持穩定與高效。? 真正做到——數據隨變,系統不亂。

前言:前后端“翻譯官”的困境

在當今微服務與前后端分離的浪潮中,JSON 已成為系統通信的“共同語言”。 但對于 Java 開發者來說,JSON 字段的不確定性就像一個無形的陷阱—— 前端改個字段名、加個動態屬性,后端解析立刻崩潰。

設想這樣一個場景:

{
  "name": "icoderoad",
  "mobile": "13900000000",
  "extFields": {
    "email": "icoderoad@gmail.com",
    "age": 2
  }
}

或者換一種寫法:

{
  "name": "icoderoad",
  "mobile": "13900000000",
  "email": "icoderoad@gmail.com",
  "age": 22
}

而你的后端實體類 /src/main/java/com/icoderoad/model/User.java 卻是這樣的:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private String mobile;
}

這種不匹配讓無數后端開發者陷入了“字段地獄”。 那么問題來了:如何優雅地適配前端變化多端的 JSON?

本文將深入解析三種經典解決方案,讓 Spring Boot 從容應對任意結構的 JSON 數據!

為何 JSON 字段適配如此棘手?

在分布式與前后端獨立開發的體系中,數據結構的定義往往分屬兩個世界:

  • 前端 根據 UI 邏輯動態構建 JSON;
  • 后端 依據業務模型定義 Java Bean。

這種解耦雖提高了開發效率,卻也帶來了數據結構不匹配的問題。 特別是在以下場景中更為突出:

  1. 前端需求頻繁變動 新增字段、修改命名、嵌套層次變化,后端必須同步更新實體。
  2. 團隊命名風格差異 前端喜歡下劃線(snake_case),后端偏好駝峰(camelCase)。
  3. 業務擴展字段難以預估 比如商品促銷信息、用戶標簽、動態配置等。

因此,一個靈活、安全、可擴展的 JSON 適配機制,幾乎是所有 Spring Boot 項目不可或缺的“護身符”。

實戰出擊:三種解決方案詳解

方案一:Map接收法 —— 輕量又實用

當僅需臨時存儲額外字段時,用 Map<String, Object> 是最直接的方式。

示例代碼

路徑:/src/main/java/com/icoderoad/model/User.java

package com.icoderoad.model;


import lombok.*;
import java.util.Map;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private String mobile;
    protected Map<String, Object> extFields;
}

路徑:/src/main/java/com/icoderoad/controller/UserController.java

package com.icoderoad.controller;


import com.icoderoad.model.User;
import com.icoderoad.util.UserUtil;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/user")
public class UserController {


    @PostMapping("/json-map")
    public User getUser(@RequestBody User user) {
        UserUtil.print(user, "email", "age");
        return user;
    }
}

路徑:/src/main/java/com/icoderoad/util/UserUtil.java

package com.icoderoad.util;


import com.icoderoad.model.User;
import org.apache.commons.lang3.ArrayUtils;


public final class UserUtil {
    private UserUtil() {}


    public static void print(User user, String... keys) {
        System.out.println("name: " + user.getName());
        System.out.println("mobile: " + user.getMobile());
        if (ArrayUtils.isNotEmpty(keys)) {
            for (String k : keys) {
                System.out.println(k + ": " + user.getExtFields().get(k));
            }
        }
    }
}

控制臺輸出:

name: icoderoad
mobile: 13900000000
email: icoderoad@gmail.com
age: 22

優點:實現簡單,適合輕量場景。缺點:可讀性不強,維護復雜結構時代碼臃腫。

方案二:JsonNode接收法 —— 結構復雜的利器

當 JSON 層次較深或結構不固定時,JsonNode 是更專業的選擇。 它來自 Jackson 庫,可以精確訪問任意節點。

Maven 依賴
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>
實體類

路徑:/src/main/java/com/icoderoad/model/User.java

package com.icoderoad.model;


import com.fasterxml.jackson.databind.JsonNode;
import lombok.*;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private String mobile;
    private JsonNode extFields;
}
控制器

路徑:/src/main/java/com/icoderoad/controller/UserController.java

@PostMapping("/json-node")
public User getUserByJsonNode(@RequestBody User user) {
    UserUtil.print(user, "email", "age");
    return user;
}
測試輸出
name: icoderoad
mobile: 13900000000
email: icoderoad@gmail.com
age: 22

優勢

  • 可解析任意深度的嵌套結構;
  • 支持動態訪問節點屬性;
  • 與 Jackson 緊密集成。

劣勢

  • 操作較復雜;
  • 學習曲線略高。

方案三:@JsonAnySetter / @JsonAnyGetter —— Jackson 雙劍合璧

這對注解是 JSON 適配的“終極解決方案”。 它能在反序列化和序列化過程中,動態接收與輸出未知字段

示例代碼

路徑:/src/main/java/com/icoderoad/model/User.java

package com.icoderoad.model;


import com.fasterxml.jackson.annotation.*;
import lombok.*;
import java.util.*;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private String mobile;


    private Map<String, Object> extFields = new HashMap<>();


    @JsonAnySetter
    public void setUnknownField(String key, Object value) {
        extFields.put(key, value);
    }


    @JsonAnyGetter
    public Map<String, Object> getUnknownFields() {
        return extFields;
    }
}
控制器

路徑:/src/main/java/com/icoderoad/controller/UserController.java

@PostMapping("/json-annotation")
public User getUserByAnnotation(@RequestBody User user) {
    UserUtil.print(user, "email", "age");
    return user;
}

輸出結果:

name: icoderoad
mobile: 13900000000
email: icoderoad@gmail.com
age: 22

優勢

  • 動態接收和輸出未知字段;
  • 代碼更清晰、語義更強;
  • 特別適合字段頻繁變化的系統。

案例實操:在線商城中的動態促銷信息

假設我們的商品 JSON 如下:

{
  "productName": "智能手表",
  "price": 1999.00,
  "stock": 100,
  "promotionInfo": {
    "discount": 0.8,
    "fullReduce": {
      "condition": 2000,
      "reduction": 500
    }
  }
}

后端實體類 /src/main/java/com/icoderoad/model/Product.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
    private String productName;
    private Double price;
    private Integer stock;
    private Map<String, Object> promotionInfo;
}

控制器 /src/main/java/com/icoderoad/controller/ProductController.java

@RestController
@RequestMapping("/product")
public class ProductController {


    @PostMapping("/map")
    public Product saveProduct(@RequestBody Product product) {
        System.out.println("商品名稱:" + product.getProductName());
        System.out.println("價格:" + product.getPrice());
        System.out.println("庫存:" + product.getStock());
        System.out.println("促銷信息:" + product.getPromotionInfo());
        return product;
    }
}

若促銷信息結構更復雜,可改用 JsonNode

private JsonNode promotionInfo;

即可輕松訪問嵌套節點:

Double discount = product.getPromotionInfo().get("discount").asDouble();

總結:讓 JSON 適配不再是難題

在復雜多變的前后端交互中,JSON 字段適配是永恒的主題。 通過本文的三種方案,我們可以針對不同場景靈活選擇:

場景

推薦方案

優勢

復雜度

輕量臨時字段

Map

簡單易實現

★☆☆

復雜嵌套結構

JsonNode

精確控制結構

★★☆

動態擴展系統

@JsonAnySetter/@JsonAnyGetter

靈活可維護

★★★

結語: 在 Spring Boot 的世界里,JSON 適配不應再是噩夢。 掌握這些技巧,你將能夠優雅地駕馭任意結構的數據, 讓系統在需求變更的浪潮中依舊保持穩定與高效。 真正做到——數據隨變,系統不亂。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2022-11-07 08:58:41

搜索數據索引

2025-04-15 08:25:00

網絡分層網絡分層模型網絡

2024-08-26 00:01:00

前端性能優化

2025-10-17 07:33:14

SpringEdgeTTS語音合成

2024-01-26 07:00:11

Python工具無向圖

2021-12-21 09:05:46

命令Linux敲錯

2022-09-30 13:55:46

Python機器人

2025-04-10 08:03:31

Spring系統

2025-09-12 09:31:29

2024-04-15 00:08:00

MySQLInnoDB數據庫

2024-07-09 08:49:56

2025-02-28 09:47:36

2015-05-29 09:01:48

2021-06-08 07:48:26

數據 Python開發

2020-06-15 08:03:17

大文件OOM內存

2020-04-10 09:55:28

Git 工具黑魔法

2023-11-27 17:11:02

數據庫oracle

2018-10-11 15:51:32

ChromeGoogle瀏覽器

2020-10-29 15:17:49

代碼開發工具

2013-07-30 11:24:33

SAP“簡化IT 一招
點贊
收藏

51CTO技術棧公眾號

欧美日韩一级在线观看| 午夜激情视频网| se在线电影| 国产资源精品在线观看| 欧美黑人xxxⅹ高潮交| 久久久久成人精品无码中文字幕| 僵尸再翻生在线观看免费国语| 国产日韩亚洲欧美综合| 亚洲最大福利视频网| 亚洲伊人成人网| 天天综合一区| 日韩成人激情视频| 五月天丁香花婷婷| 伊人久久综合一区二区| 亚洲精品视频一区二区| 欧美日产一区二区三区在线观看| 国产精品高潮呻吟AV无码| 亚洲激情网址| 精品久久久av| 一级片视频免费看| 日本一区二区三区视频在线看| 色先锋aa成人| 国产毛片久久久久久国产毛片| 成人精品一区二区三区校园激情| 粉嫩一区二区三区性色av| 国产精品久久久久久久久免费| 免费在线黄色片| 黑丝美女一区二区| 亚洲精美色品网站| 国产人妖在线观看| 亚洲成人1区| 色琪琪一区二区三区亚洲区| 日韩成人手机在线| 黄色精品免费看| 中文字幕av一区二区三区免费看| 极品日韩久久| 午夜精品小视频| 麻豆国产91在线播放| 欧美又大又硬又粗bbbbb| 亚洲国产精品免费在线观看| 日韩a一区二区| 亚洲视频专区在线| 特大黑人巨人吊xxxx| 中文在线综合| 欧美一区二区三区播放老司机| 天天爱天天操天天干| 美女的胸无遮挡在线观看| 一区二区三区日韩精品视频| 国产大尺度在线观看| 亚洲麻豆精品| 国产精品欧美一区喷水| 亚洲二区自拍| 91caoporm在线视频| 国产偷国产偷亚洲高清人白洁| 久久99精品国产99久久| 手机在线不卡av| www.av亚洲| 久久99精品久久久久久青青日本| 蜜臀久久99精品久久久| 成人黄色在线视频| 国产一区再线| 香蕉久久国产av一区二区| 成人动漫一区二区在线| 国产一区二区不卡视频| 午夜视频免费在线| 久久一夜天堂av一区二区三区 | 欧美一级特黄aaaaaa在线看片| 午夜激情视频在线观看| 亚洲欧洲成人自拍| 视频一区二区视频| 日本在线视频中文有码| 亚洲成人综合视频| av免费观看网| 久久精品女人天堂av免费观看 | 日本不卡在线观看视频| 高清成人在线| 欧美喷潮久久久xxxxx| 精品综合久久久久| 亚洲欧美日本国产| 亚洲精品久久久久中文字幕欢迎你| 好吊一区二区三区视频| 精品久久视频| 欧美大尺度在线观看| 国产大片中文字幕在线观看| 小嫩嫩精品导航| 国产精品入口夜色视频大尺度| 国产又粗又大又爽| 成人禁用看黄a在线| 欧美视频小说| 黄色大片在线播放| 激情亚洲一区二区三区四区 | 青青草精品在线视频| 在线成人h网| 国产精品极品美女粉嫩高清在线| 99草在线视频| 2020国产精品久久精品美国| 中文字幕一区二区三区最新 | 天天影院图片亚洲| 国产精品美日韩| 国产爆乳无码一区二区麻豆| 在线手机中文字幕| 91精品国产综合久久久久久久 | 国产wwwxx| 一区二区免费| 一区二区三欧美| 青青草原国产视频| 日韩福利电影在线观看| 成人免费视频网站| 欧美人xxx| 日韩欧美福利视频| 亚洲图片欧美另类| 色婷婷一区二区三区| 69视频在线播放| 国产精品自拍电影| 国产日韩欧美一区二区三区乱码| 4444在线观看| 日本国产亚洲| 亚洲欧美色图片| 国产第100页| 国产精品1区2区3区在线观看| 鲁鲁视频www一区二区| 在线观看电影av| 欧美日韩国产高清一区二区三区 | 国产女精品视频网站免费| 天天摸天天干天天操| 一区二区三区日韩欧美| 一区二区三区 欧美| 亚洲欧洲色图| 久久久久久久电影一区| 国产日韩免费视频| 国产精品亲子乱子伦xxxx裸| 国产极品美女高潮无套久久久| 91九色鹿精品国产综合久久香蕉| 精品国模在线视频| 一区二区三区在线免费观看视频| 91麻豆精品在线观看| 免费拍拍拍网站| 91夜夜蜜桃臀一区二区三区| 久久国产精品偷| 国产伦子伦对白视频| 日本一区二区成人| 五月婷婷深爱五月| blacked蜜桃精品一区| 日本免费一区二区三区视频观看| 神马久久久久久久久久| 亚洲电影一级黄| 蜜臀视频在线观看| 亚洲午夜极品| 国产精品日韩高清| 九色porny自拍视频在线播放| 精品少妇一区二区三区| 久草免费新视频| 懂色av一区二区在线播放| 成人av在线播放观看| 日韩精品一区二区三区中文| 久久99久久99精品中文字幕 | 国产精品99久久久久久宅男| 日本三日本三级少妇三级66| 精品国产亚洲一区二区三区在线 | 欧美日韩中文视频| 成人不卡免费av| 日韩精品―中文字幕| 日韩欧美天堂| 国产精品高潮视频| 日本电影全部在线观看网站视频 | 欧美一级做性受免费大片免费| 亚洲国产综合人成综合网站| 这里只有精品在线观看视频 | 亚洲国产国产| 国产成人极品视频| 色开心亚洲综合| 欧美一区永久视频免费观看| 久久久久久久久精| 久久久久久夜精品精品免费| av五月天在线| 你懂的视频一区二区| 国产一区二区在线网站 | 激情久久婷婷| 裸体丰满少妇做受久久99精品| 羞羞影院欧美| 久久久精品视频成人| 狠狠综合久久av一区二区| 欧美视频精品一区| 亚洲AV成人无码精电影在线| 国产999精品久久| 女人另类性混交zo| 91精品福利| 欧美日韩国产三区| 91精品国产色综合久久不卡粉嫩| 欧美—级a级欧美特级ar全黄| 视频三区在线观看| 538prom精品视频线放| 日韩精品视频免费看| 中文字幕国产一区| 极品白嫩的小少妇| 免费观看在线色综合| 波多野结衣av一区二区全免费观看| 国产精品三级| 懂色av一区二区三区在线播放| 黑人巨大精品| 欧美日韩国产成人| 国产精品一区二区婷婷| 精品粉嫩超白一线天av| 亚洲性在线观看| 欧美日韩国产一区在线| 中文字幕电影av| 久久精品一区二区三区不卡牛牛| 中文字幕1区2区| 免费观看日韩电影| 成人免费毛片网| 欧美精品91| 亚洲高清不卡一区| 欧美调教视频| 91精品网站| 久久久久毛片| 国产精品国产三级国产专播精品人 | 人妻无码一区二区三区四区| 精品国产1区| 黄色小网站91| 99久久免费精品国产72精品九九| 国产精品视频xxxx| 自拍视频在线看| 性色av一区二区三区| 久草资源在线观看| 日韩亚洲欧美中文高清在线| 欧美色图另类| 亚洲国产成人精品女人久久久 | 国产精品人人人人| 亚洲综合激情另类小说区| 国产中文av在线| 国产精品免费久久| 波多野结衣一二三四区| 久久精品亚洲乱码伦伦中文 | 久久青草福利网站| 污的网站在线观看| 久久av在线播放| 一区二区高清不卡| 正在播放欧美一区| 国产三区四区在线观看| 亚洲免费视频在线观看| 神马久久久久久久久久| 亚洲国产日韩欧美在线99| 丰满少妇一级片| 精品处破学生在线二十三| 黑人操亚洲女人| 欧美精品一区二区久久婷婷| 亚洲国产成人在线观看| 精品久久免费看| 乱色精品无码一区二区国产盗| 精品国产一区二区精华| 日韩一卡二卡在线| 亚洲精品国产福利| 天堂网av2014| 亚洲护士老师的毛茸茸最新章节| 蜜臀av中文字幕| 日韩av在线免费观看一区| 欧美一级淫片aaaaaa| 亚洲精品自拍视频| 欧美777四色影视在线| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 邻居大乳一区二区三区| 亚洲视频视频在线| 免费在线毛片网站| 成年无码av片在线| 欧美性猛片xxxxx免费中国 | 强开小嫩苞一区二区三区网站| 亚洲精品网址| 日韩久久久久久久久久久久| 在线播放精品| av丝袜天堂网| 久久精品国产一区二区三区免费看 | 久久久av水蜜桃| 精品色999| 杨幂一区欧美专区| 欧美日韩岛国| 久久婷婷五月综合色国产香蕉| 日韩精品视频网| 小明看看成人免费视频| 国产剧情一区在线| 欧美无人区码suv| 欧美激情在线免费观看| xxxx日本少妇| 欧美特级www| 91麻豆成人精品国产免费网站| 日韩美女视频一区二区在线观看| 婷婷在线观看视频| 在线观看免费高清视频97| 超碰在线caoporn| 国产91精品视频在线观看| 欧美一区=区三区| 国产亚洲精品久久飘花| 欧美日韩在线网站| 国产精品自拍合集| 三级不卡在线观看| 日本中文字幕有码| 亚洲国产精品精华液ab| 久久久久久久九九九九| 欧美日韩一区高清| 天天操天天射天天舔| 久久精品99久久久久久久久| 精品丝袜在线| 91天堂在线观看| 欧美在线免费看视频| 毛片在线播放视频| 狠狠网亚洲精品| 女~淫辱の触手3d动漫| 亚洲精品视频免费观看| 91久久国产综合久久91| 日韩精品一区二| 欧美人xxx| 国产精品成人在线| 成人中文字幕视频| 男女h黄动漫啪啪无遮挡软件| 欧美专区18| 国产吃瓜黑料一区二区| 亚洲国产精品高清| 国产又黄又猛又粗又爽| 日韩精品在线一区| 黄色网在线看| 国产精品自拍视频| 免费成人高清在线视频theav| 91动漫在线看| 国内精品久久久久影院色| 摸摸摸bbb毛毛毛片| 精品久久久一区二区| 亚洲AV无码国产精品午夜字幕| 日韩中文视频免费在线观看| 欧美特大特白屁股xxxx| 精品免费国产| 在线日韩视频| 在线播放第一页| 亚洲美女在线一区| 国产精品国产三级国产普通话对白| 亚洲男人天堂2024| 吉吉日韩欧美| 欧美视频小说| 久久久精品日韩| 在线观看福利片| 色久综合一二码| 久久精品国产亚洲a∨麻豆| 欧美中文字幕在线| 偷拍自拍一区| 成熟老妇女视频| 久久综合网色—综合色88| 99精品视频99| 精品视频偷偷看在线观看| 黄色漫画在线免费看| 久久久国产精品一区二区三区| 免费日韩精品中文字幕视频在线| 噜噜噜在线视频| 色婷婷av一区二区三区gif | 欧美成在线视频| 亚洲一区二区三区中文字幕在线观看| 香蕉视频免费版| 国产福利一区二区三区视频| 九九视频免费看| 亚洲电影成人av99爱色| bbw在线视频| 蜜桃av噜噜一区二区三| 免费视频一区| 久久久久亚洲AV成人无在| 精品视频一区二区三区免费| 看女生喷水的网站在线观看| 2019国产精品视频| 亚洲精品人人| 中文字幕一区二区人妻在线不卡| 欧美综合一区二区| 日本中文字幕在线2020| 2014国产精品| 亚洲一区亚洲| 欧美性受xxxx黑人| 这里只有精品视频在线观看| 婷婷av在线| 久久影院理伦片| 久久激情五月激情| 免费在线看黄网址| 日韩第一页在线| 国产在视频一区二区三区吞精| 中国一级黄色录像| av电影在线观看一区| 中文天堂在线视频| 欧美成人精品一区二区| 日本一道高清一区二区三区| 奇米视频888| 午夜伦理一区二区| av黄色在线观看| 国产精品v欧美精品v日韩精品| 久久午夜激情| 黄页网站免费观看| 一区二区三区四区在线观看视频| 精品视频在线播放一区二区三区| 无码人妻丰满熟妇区96| 国产精品久久久久久一区二区三区| 亚洲国产视频一区二区三区| 国产成人精品视| 欧美日韩一视频区二区| 69xxx免费| 精品无人国产偷自产在线| 欧美综合社区国产| 欧在线一二三四区|