精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

女同性恋一区二区三区| 在线观看免费黄色片| 一区二区小视频| 亚洲中无吗在线| 精品国产乱码久久久久久夜甘婷婷| 日本wwwcom| 国产小视频在线播放| 国产在线精品视频| 欧美最猛性xxxx| 日本一二三区在线观看| 人妖一区二区三区| 欧美精品少妇一区二区三区| 久久精品国产sm调教网站演员| 国产青青草在线| 国产 欧美在线| 国产精品美乳一区二区免费| 国产一级视频在线| 日韩欧美精品一区| 亚洲精品一区中文| 久久久久久无码精品人妻一区二区| 成人免费影院| 亚洲一区日韩精品中文字幕| 亚洲a∨一区二区三区| 免费观看黄色av| 老司机精品视频在线| 欧美一级高清免费| 岛国毛片在线观看| 欧美xxav| 在线视频中文亚洲| 中文字幕一二三四区| 国产精品自在| 日韩三级高清在线| 911av视频| 91亚洲视频| 色激情天天射综合网| a级黄色一级片| 秋霞在线午夜| 亚洲精品一二三四区| 夜夜爽99久久国产综合精品女不卡 | 99久久视频| 亚洲性猛交xxxxwww| 亚洲av片不卡无码久久| 国产精品极品在线观看| 欧美电影精品一区二区| 午夜免费福利视频在线观看| 日韩一区精品| 欧美色综合久久| 欧美午夜性生活| 亚洲成人av观看| 一本高清dvd不卡在线观看| 青青草国产精品视频| 福利小视频在线| 亚洲高清在线精品| 久久久久免费看黄a片app| av在线中出| 亚洲丶国产丶欧美一区二区三区| 国产精品videossex国产高清 | 青青久久av北条麻妃黑人| 黄色片视频网站| 国产亚洲精品久久久久婷婷瑜伽| 午夜精品在线视频| 97久久久久久久| 久色成人在线| 国产精品福利网站| 一区二区视频免费| 国产一二精品视频| 岛国视频一区| 日本私人网站在线观看| 久久久久国产一区二区三区四区| 欧美日韩一区二区视频在线| 国产精品久久久久一区二区国产 | 日韩免费福利视频| 欧美视频你懂的| 国产福利精品一区二区三区| 日本精品在线播放| 亚洲精品按摩视频| 一区二区黄色片| 久久久久久影院| 欧美激情亚洲自拍| 在线精品免费视| 久久国产成人午夜av影院| 97碰碰视频| 免费观看成年在线视频网站| 欧美国产1区2区| 激情图片qvod| 在线视频超级| 欧美乱熟臀69xxxxxx| 亚洲成人精品在线播放| 亚洲三级精品| 日韩在线观看视频免费| 精品视频久久久久| 日韩va亚洲va欧美va久久| 91网站在线看| 四虎成人免费在线| 亚洲欧洲韩国日本视频| 妞干网在线观看视频| 国产亚洲一区二区手机在线观看| 91精品国产乱码久久蜜臀| 国产乱了高清露脸对白| 国产精品毛片久久| 欧美亚洲成人精品| 国产老妇伦国产熟女老妇视频| 成人av资源站| 亚洲综合五月天| segui88久久综合9999| 欧美日韩国产一区二区三区地区| 一级黄色免费视频| 久久性感美女视频| 97超碰色婷婷| 国产成a人亚洲精v品无码| 国产丝袜在线精品| 久无码久无码av无码| 日韩黄色三级| 亚洲欧美日韩精品久久奇米色影视| 加勒比婷婷色综合久久| 日韩专区欧美专区| 九九九九九精品| 激情在线小视频| 欧美主播一区二区三区美女| 中文字幕在线永久| 午夜精品婷婷| 成人免费看片视频| 国产美女性感在线观看懂色av| 亚洲国产综合人成综合网站| 免费黄频在线观看| 日韩成人激情| 国产精品激情av在线播放| 五月天久久久久久| 亚洲一区电影777| 日本55丰满熟妇厨房伦| 天天射—综合中文网| 国产精品久久久久久av福利| 久蕉依人在线视频| 欧美日韩在线第一页| 日本人dh亚洲人ⅹxx| 婷婷中文字幕一区| 国产日产欧美精品| 尤物网址在线观看| 欧美日韩国产综合一区二区| 色婷婷国产精品免| 日韩电影免费在线看| 欧美一区二区三区电影在线观看 | 大地资源中文在线观看免费版| 天天综合天天综合色| 男男一级淫片免费播放| 伊人精品在线| 黑人另类av| 精品丝袜在线| 亚洲欧美日韩中文在线制服| 久久久黄色大片| 久久免费电影网| 日韩 欧美 高清| 蜜桃一区二区| 国产精品爱久久久久久久| 国产女主播在线直播| 在线观看av一区二区| 免费成人深夜天涯网站| 精品一区二区在线视频| 看一级黄色录像| 久久午夜影院| 日韩美女主播视频| 成人在线视频成人| 91精品国模一区二区三区| 亚洲国产精品久| 成人av网站在线| 丰满少妇被猛烈进入高清播放| 久久av导航| 国产一区深夜福利| 美女91在线| 亚洲欧美日韩直播| 国产精品特级毛片一区二区三区| 亚洲乱码国产乱码精品精的特点| 深夜福利网站在线观看| 亚洲国产导航| 麻豆亚洲一区| 热久久久久久| 久久久久日韩精品久久久男男 | 色偷偷综合社区| 国产三级三级在线观看| 亚洲成人在线免费| 精品人妻一区二区三区蜜桃视频| 麻豆高清免费国产一区| 日韩国产小视频| 国产精品欧美三级在线观看| 成人国产精品一区二区| av在线最新| 日韩在线视频观看| 免费成人在线看| 欧美日韩高清影院| 国产情侣在线视频| 国产精品灌醉下药二区| 国产成人精品无码片区在线| 久久精品av麻豆的观看方式| 国产资源在线免费观看| 欧美一级精品片在线看| 国产精品v欧美精品v日韩精品| 另类激情视频| 欧美国产日韩精品| 亚洲精品承认| 精品亚洲永久免费精品| 国产日韩欧美中文字幕| 色久综合一二码| 不卡的免费av| 国产精品久久久久久久久动漫| 免费a v网站| 国产精品综合一区二区三区| 国产a级片免费观看| 狠狠噜噜久久| 中文字幕在线亚洲三区| 国产传媒欧美日韩成人精品大片| 99电影网电视剧在线观看| а√天堂资源国产精品| 91av中文字幕| 男男gaygays亚洲| 久久激情五月丁香伊人| 欧美香蕉爽爽人人爽| 精品电影一区二区三区| 国产福利第一页| 欧美精品乱码久久久久久| 天天操天天干天天摸| 亚洲www啪成人一区二区麻豆| 免费三级在线观看| 中文字幕精品一区二区精品绿巨人| 欧产日产国产精品98| 国产精品一区二区x88av| 日韩av在线中文| 日本在线不卡一区| 免费看a级黄色片| 亚洲一区中文| 国产老熟妇精品观看| 欧美日韩综合| 国产精品一区在线免费观看| 久久亚洲专区| 欧美 另类 交| 国产精品99久久精品| 亚洲人成77777| 久久在线视频免费观看| 一区二区三区免费看| 日韩伦理视频| 亚洲春色在线视频| 国内精品久久久久久久影视简单 | 国产精品免费看一区二区三区| 国产美女视频一区二区| 成人福利免费观看| 99视频有精品高清视频| 91久久久久久久久久久| 4438五月综合| 亚洲综合社区网| 精品中文视频| 成人一区二区三区四区| 国产成人在线中文字幕| 久久成人资源| 欧美欧美黄在线二区| 日本精品免费| 日本久久精品| 黄色网址在线免费看| 欧美日本在线| 国产一区二区网| 日精品一区二区| 午夜精品中文字幕| 国产精品中文字幕欧美| 久久久久久婷婷| 久久午夜老司机| 蜜桃av免费在线观看| 亚洲欧美视频一区| 久久精品视频日本| 欧美日韩在线观看视频| 中文字幕在线观看国产| 91精品在线一区二区| 日本xxxxxwwwww| 亚洲热线99精品视频| 国产在线高清理伦片a| 午夜精品久久久久久99热| 日韩毛片免费观看| 91欧美视频网站| 麻豆国产欧美一区二区三区r| 欧美日韩在线一二三| 亚洲欧美偷拍自拍| 5月婷婷6月丁香| 久久超级碰视频| 亚洲男女在线观看| 欧美高清在线一区| 国产在线拍揄自揄拍| 欧美性猛交xxxxxx富婆| 亚洲AV无码精品色毛片浪潮| 日韩精品久久久久久久玫瑰园| a天堂中文在线88| 高清一区二区三区四区五区| 精品网站在线| 国产精品久久亚洲| 日韩电影在线视频| 你真棒插曲来救救我在线观看| 美女久久久精品| 91九色蝌蚪porny| 国产精品美女久久福利网站 | 欧美自拍丝袜亚洲| 欧美特黄一级视频| 日韩视频在线一区| 性欧美18xxxhd| 99久久免费国| 成人一级毛片| 黄色av网址在线播放| 黄一区二区三区| av黄色在线免费观看| 亚洲国产精品视频| 91九色蝌蚪91por成人| 亚洲精品小视频| 波多野结衣精品| 亚洲va欧美va在线观看| 欧洲三级视频| 俄罗斯av网站| 懂色av一区二区三区免费看| 亚洲天堂av中文字幕| 欧美午夜电影在线| 黄色福利在线观看| 欧美裸体男粗大视频在线观看| av高清一区| 久久久综合亚洲91久久98| 欧美日韩亚洲国产精品| 一级淫片在线观看| 国产精品区一区二区三区| 免费的毛片视频| 亚洲国产日韩一区| 羞羞的网站在线观看| 成人a视频在线观看| 欧美亚洲国产激情| 国产超碰在线播放| 2020国产成人综合网| 亚洲国产成人精品激情在线| 精品久久人人做人人爱| а√中文在线8| 91精品在线播放| 99久久综合| 五月天丁香花婷婷| 中文字幕日韩一区| 国产又大又粗又长| zzijzzij亚洲日本成熟少妇| 巨大黑人极品videos精品| 日韩欧美视频一区二区| 日韩二区在线观看| 手机看片福利视频| 欧美又粗又大又爽| 99re热久久这里只有精品34| 国产精品美腿一区在线看| 日韩精品久久| 国产永久免费网站| 亚洲激情图片小说视频| 国产深喉视频一区二区| 久99久在线视频| 一区二区三区自拍视频| 无码av天堂一区二区三区| 不卡电影一区二区三区| 国产真实乱人偷精品视频| 精品国精品国产尤物美女| 久久免费电影| 麻豆一区区三区四区产品精品蜜桃| 亚洲一区自拍| 亚洲最大成人综合网| 欧美三级电影在线观看| 毛片在线视频| www.久久草| 六月婷婷一区| 国产精品久久久久久成人| 51久久夜色精品国产麻豆| 99在线播放| 国产欧美日韩一区二区三区| 国产精品综合| 亚洲黄色网址大全| 日韩一区二区精品在线观看| 51av在线| 色综合电影网| 国产精品一区二区无线| 日韩欧美中文字幕一区二区| 亚洲免费av片| 成人免费观看49www在线观看| 精品人妻大屁股白浆无码| 91免费版在线| 中文字幕乱码在线观看| 欧美精品激情blacked18| 亚洲人成网亚洲欧洲无码| 免费成年人高清视频| 亚洲电影激情视频网站| 国产精品ⅴa有声小说| 7777奇米亚洲综合久久 | 热99精品里视频精品| 999精品一区| 黄色免费视频网站| 精品视频免费在线| 97人澡人人添人人爽欧美| 亚洲 国产 日韩 综合一区| 高清在线观看日韩| 亚洲av综合一区| 久久久噜噜噜久久中文字免| 精品产国自在拍| 9.1在线观看免费| 欧美无砖专区一中文字| 91超碰免费在线| 日本免费在线视频观看| 久久久噜噜噜久久人人看 | 国产精品久久久久久久妇|