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

動態 JSON 字段太頭疼?SpringBoot + Jackson 兩個注解輕松搞定序列化!

開發 前端
在開發 Web 接口時,經常會碰到一種情況:前端或第三方返回的 JSON 字段是動態變化的,有些字段你一開始知道,有些字段卻是根據用戶輸入、配置項或業務狀態“臨時冒出來”的。

在開發 Web 接口時,經常會碰到一種情況:前端或第三方返回的 JSON 字段是動態變化的,有些字段你一開始知道,有些字段卻是根據用戶輸入、配置項或業務狀態“臨時冒出來”的。

你可能一開始會想到用 Map<String, Object> 來兜底處理這些字段,但這種方式會讓數據結構不清晰、可維護性差。 其實 Jackson 已經為我們準備好了“動態屬性處理器”:@JsonAnySetter 和 @JsonAnyGetter,它們可以把這些不確定字段收進來、再自動輸出,不影響已有字段邏輯。

Jackson 注解的“萬能抽屜”方案設計

我們可以把處理邏輯想象成一個數據“雜貨鋪”:

  • 常規字段:貨架上擺著 name、age、email 等常用品;
  • 動態字段:顧客突然問你“有沒有咖喱味的洗發水”?雖然你之前沒準備,但你能靈活處理,收進一個 Map,這就是“萬能抽屜”。

使用注解:

目標

Jackson 注解

功能說明

接收未知字段

@JsonAnySetter

反序列化時接收未定義的字段

序列化輸出動態字段

@JsonAnyGetter

序列化時輸出 Map 中的字段

忽略字段

@JsonIgnoreProperties

顯式忽略某些字段

項目結構預覽

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── icoderoad/
│   │           └── json/
│   │               └── handler/
│   │                   ├── Person.java
│   │                   ├── JsonController.java
│   │                   └── JsonApplication.java
│   └── resources/
│       ├── templates/
│       │   ├── form.html
│       │   └── result.html
│       └── application.yml

后端核心類

Person.java — 支持動態字段的模型類

package com.icoderoad.json.handler;


import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;


import java.util.HashMap;
import java.util.Map;


/**
 * JSON 映射模型:既支持固定字段,也支持動態字段擴展。
 */
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {


    private String name;
    private int age;


    // 用于存放動態字段
    private Map<String, Object> additionalFields = new HashMap<>();


    public Person() {}


    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }


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


    @JsonAnyGetter
    public Map<String, Object> getAdditionalFields() {
        return additionalFields;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


public int getAge() {
return age;
	}


public void setAge(int age) {
this.age = age;
	}
}

Spring Boot 控制器:JsonController.java

package com.icoderoad.json.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


import java.util.Map;


/**
 * Web 控制器:展示表單、處理提交、展示結果。
 */
@Controller
@RequestMapping("/person")
public class JsonController {


    @GetMapping("/form")
    public String showForm() {
        return "form";
    }


    @PostMapping("/submit")
    public String handleSubmit(
            @RequestParam String name,
            @RequestParam int age,
            @RequestParam Map<String, String> allParams,
            Model model
    ) {
        Person person = new Person();
        person.setName(name);
        person.setAge(age);


        for (Map.Entry<String, String> entry : allParams.entrySet()) {
            String key = entry.getKey();
            if (!key.equals("name") && !key.equals("age")) {
                person.addField(key, entry.getValue());
            }
        }


        model.addAttribute("person", person);
        return "result";
    }
}

application.yml 配置

server:
  port: 8080


spring:
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    mode: HTML

Thymeleaf + Bootstrap 表單頁:form.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>動態字段提交表單</title>
    <link  rel="stylesheet">
</head>
<body class="p-4">
<div class="container">
    <h2>人員信息提交</h2>
    <form method="post" action="/person/submit" id="personForm">
        <div class="mb-3">
            <label class="form-label">姓名</label>
            <input type="text" name="name" class="form-control" required/>
        </div>
        <div class="mb-3">
            <label class="form-label">年齡</label>
            <input type="number" name="age" class="form-control" required/>
        </div>
        <hr>
        <h4>添加自定義字段</h4>
        <div id="dynamicFields"></div>
        <button type="button" class="btn btn-outline-secondary mb-3" onclick="addField()">添加字段</button>
        <br>
        <button type="submit" class="btn btn-primary">提交</button>
    </form>
</div>


<script>
    let fieldCount = 0;


    function addField() {
        const container = document.getElementById("dynamicFields");
        const div = document.createElement("div");
        div.classList.add("mb-2", "row");


        div.innerHTML = `
            <div class="col">
                <input type="text" class="form-control" name="key${fieldCount}" placeholder="字段名" required>
            </div>
            <div class="col">
                <input type="text" class="form-control" name="value${fieldCount}" placeholder="字段值" required>
            </div>
        `;


        container.appendChild(div);


        // 將字段名映射成 key=value 的格式
        fieldCount++;
        document.getElementById("personForm").addEventListener("submit", function (e) {
            const allFields = document.querySelectorAll("#dynamicFields .row");
            allFields.forEach(row => {
                const keyInput = row.querySelector("input[name^='key']");
                const valueInput = row.querySelector("input[name^='value']");
                if (keyInput && valueInput) {
                    const hidden = document.createElement("input");
                    hidden.type = "hidden";
                    hidden.name = keyInput.value;
                    hidden.value = valueInput.value;
                    document.getElementById("personForm").appendChild(hidden);
                }
            });
        }, {once: true});
    }
</script>
</body>
</html>

提交結果展示頁:result.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>提交結果</title>
    <link  rel="stylesheet">
</head>
<body class="p-4">
<div class="container">
    <h2>提交結果</h2>
    <table class="table table-bordered">
        <tr>
            <th>字段</th>
            <th>值</th>
        </tr>
        <tr>
            <td>姓名</td>
            <td th:text="${person.name}">-</td>
        </tr>
        <tr>
            <td>年齡</td>
            <td th:text="${person.age}">-</td>
        </tr>
        <tr th:each="entry : ${person.additionalFields}">
            <td th:text="${entry.key}">字段名</td>
            <td th:text="${entry.value}">字段值</td>
        </tr>
    </table>
    <a href="/person/form" class="btn btn-secondary">重新提交</a>
</div>
</body>
</html>

運行效果演示

  1. 啟動項目后,訪問 http://localhost:8080/person/form
  2. 填寫姓名、年齡,并通過“添加字段”添加任意鍵值;
  3. 點擊提交,跳轉到結果頁展示所有字段(包括動態字段);
  4. 所有數據經由 @JsonAnySetter 和 @JsonAnyGetter 自動解析和序列化。

總結:從動態接收到可視化回顯,一站式搞定

通過本文示例,我們完成了一個支持:

  • 不確定 JSON 字段結構解析(@JsonAnySetter);
  • 可序列化輸出的動態字段模型(@JsonAnyGetter);
  • Web 表單中動態字段可視化輸入與管理(Thymeleaf + JS);
  • 提交后結構化展示所有信息(Bootstrap + 表格)。

如果你正在構建配置平臺、參數模板系統、插件引擎、或者靈活的前后端數據結構模型,本文架構可以直接復用或擴展。

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

2025-06-03 01:22:00

JavaJSON字段

2025-05-07 09:32:00

2025-06-06 02:00:00

JavaJSON字段

2025-07-14 02:00:00

2013-03-11 13:55:03

JavaJSON

2021-11-18 07:39:41

Json 序列化Vue

2018-01-17 16:38:07

MSONJSON序列化

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2025-03-03 00:00:55

Spring文件下載開發

2022-08-06 08:41:18

序列化反序列化Hessian

2024-02-22 08:06:45

JSON策略解析器

2024-06-28 08:28:43

反序列化filterJson

2016-10-20 15:54:08

Python數據序列化

2023-10-13 08:28:21

.NET平臺序列化庫

2011-06-01 15:05:02

序列化反序列化

2024-01-30 13:32:51

JSON反序列化序列化

2009-08-24 17:14:08

C#序列化

2025-01-13 12:46:31

SpringBootJacksonJSON

2025-09-28 02:11:00

JSON模型Jackson

2018-03-19 10:20:23

Java序列化反序列化
點贊
收藏

51CTO技術棧公眾號

欧美男男青年gay1069videost| 欧美国产精品中文字幕| 91国产视频在线| 精品少妇一区二区三区免费观| av免费在线一区| 亚洲精品视频观看| 美国av一区二区三区| 中文在线免费看视频| 欧美 日韩 国产 一区| 亚洲精品suv精品一区二区| 国产精品视频黄色| 国内老司机av在线| 国产精品久久夜| 国产综合 伊人色| 国产毛片毛片毛片毛片| 亚洲在线国产日韩欧美| 美乳少妇欧美精品| 先锋影音av在线| 草莓视频一区二区三区| 欧美精品乱人伦久久久久久| heyzo国产| 在线中文字幕电影| 国产精品你懂的在线欣赏| 精品久久一区二区三区蜜桃| 国产黄频在线观看| 美女国产一区二区三区| 欧美一级视频免费在线观看| 久久r这里只有精品| 欧美色婷婷久久99精品红桃| 亚洲成人激情视频| 亚洲国产综合av| 99热播精品免费| 一本久久综合亚洲鲁鲁五月天 | 91精品国产一区二区三区动漫 | 国产成人一区在线| 91精品国产综合久久久久久蜜臀| 成人在线免费看视频| 精品二区视频| 久久99视频精品| 天堂网avav| 午夜激情久久| 日韩最新在线视频| 久草手机视频在线观看| 久久精品不卡| 久久久精品免费| 免费精品在线视频| 国产精品国产一区| 久久久91精品国产一区不卡| 小嫩苞一区二区三区| 日韩伦理视频| 色悠悠久久久久| 日本爱爱小视频| 91精品二区| 精品视频9999| 日本系列第一页| 国产欧美午夜| 国产精品777| 做爰无遮挡三级| 蜜桃av一区二区三区电影| 国产精品色悠悠| 91麻豆成人精品国产| 狠狠色丁香婷婷综合| 91沈先生在线观看| 亚洲av综合色区无码一二三区| 粉嫩嫩av羞羞动漫久久久 | 亚洲av无码国产综合专区| 国产成人在线视频网址| 成人av免费在线看| 午夜福利一区二区三区| 国产日韩欧美激情| 中文字幕欧美日韩一区二区三区| 午夜影院免费在线| 五月激情六月综合| 538在线视频观看| 国产95亚洲| 精品久久久久久无| 人妻熟女aⅴ一区二区三区汇编| 国产日产一区| 欧美成人小视频| 日本道在线观看| 免费观看日韩av| 国产精品免费区二区三区观看| 天堂在线一二区| 日本一区二区三区免费乱视频| 伊人色综合影院| caoporn视频在线| 在线国产亚洲欧美| 日本一二三区在线| 偷拍亚洲精品| 久久精品99久久久久久久久| 国产在线拍揄自揄拍无码视频| 日韩激情av在线| 亚洲综合精品一区二区| 深夜福利在线视频| 成人欧美一区二区三区白人| 欧美精品一区免费| 95精品视频| 日韩精品www| 亚洲一区电影在线观看| 亚洲一区国产| 91性高湖久久久久久久久_久久99| 国模无码一区二区三区| 国产精品视频看| 9久久9毛片又大又硬又粗| 国产精品一区二区免费福利视频| 亚洲第一网站免费视频| 熟女av一区二区| 美日韩精品视频| 91视频免费进入| 97最新国自产拍视频在线完整在线看| 亚洲成人福利片| 国产精欧美一区二区三区白种人| 网红女主播少妇精品视频| 久久精品99久久久香蕉| 国产精品成人久久久| 99久久免费国产| 法国空姐在线观看免费| 欧美xnxx| 亚洲欧美一区二区三区久久 | 尤物网址在线观看| 欧美日韩一区二区三区在线免费观看| gogo亚洲国模私拍人体| 色婷婷热久久| 日韩免费观看视频| 亚洲欧美日韩动漫| 亚洲一区二区三区爽爽爽爽爽| 国产3p在线播放| 成人一区二区| 国产精品av电影| 牛牛影视精品影视| 欧美午夜性色大片在线观看| 国产精品无码一区二区三| 欧美二区不卡| 91免费电影网站| 在线观看黄av| 欧美日韩国产中文| 欧美一级特黄高清视频| 美腿丝袜亚洲综合| 亚洲欧美在线网| 先锋影音网一区二区| 中文字幕在线看视频国产欧美在线看完整| 日韩video| 7799精品视频天天看| 国产成人精品亚洲777人妖| 色中文字幕在线观看| 日本免费成人| 久久综合久久美利坚合众国| 国产精品熟女久久久久久| 1000部国产精品成人观看| 91pony九色| 欧美日韩视频一区二区三区| 99re资源| 波多野在线观看| 亚洲国产中文字幕久久网| 日本少妇性生活| 97久久人人超碰| 成人黄色片视频| 欧美日一区二区| 成人午夜激情网| 在线播放蜜桃麻豆| 精品国产91亚洲一区二区三区婷婷| 久久一区二区三| av动漫一区二区| 能在线观看的av网站| 成人综合一区| 亚洲最大成人免费视频| 9lporm自拍视频区在线| 精品亚洲永久免费精品| 自拍偷拍校园春色| 一色屋精品亚洲香蕉网站| 亚洲成人福利视频| 国产一区二区三区成人欧美日韩在线观看| 免费一区二区三区在在线视频| 欧美一区 二区 三区| 色老头一区二区三区| 国产视频www| 黄色精品一区二区| 91狠狠综合久久久久久| 国产精品一区在线观看你懂的| 男人添女荫道口喷水视频| 午夜欧洲一区| 成人高清视频观看www| 成人超碰在线| 在线观看欧美视频| 亚洲国产成人在线观看| 色婷婷久久久亚洲一区二区三区 | 国产一级片自拍| 亚洲调教视频在线观看| 日本午夜精品电影| 亚洲精品高潮| 国产精品一二三在线| 色呦呦网站在线观看| 亚洲色图50p| 精品国产一级片| 色婷婷香蕉在线一区二区| 青青草手机在线视频| 久久久久久久综合色一本| 欧美性猛交xx| 日韩精品91亚洲二区在线观看| www插插插无码免费视频网站| 久久99高清| 国产精品制服诱惑| 在线观看欧美| 日本一区二区不卡| 丁香花电影在线观看完整版| 中文字幕久精品免费视频| 欧美一区二区黄片| 在线成人高清不卡| 久久青青草原亚洲av无码麻豆| 亚洲欧美激情在线| 成人激情五月天| 99热在这里有精品免费| 欧美成人手机在线视频| 久久亚洲美女| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 午夜免费一区| 一区不卡字幕| 黑丝美女一区二区| 蜜桃免费一区二区三区| 韩国一区二区三区视频| 国产欧美va欧美va香蕉在| 色是在线视频| 亚洲91av视频| 麻豆av在线免费观看| 久久夜色精品国产亚洲aⅴ| www在线播放| 亚洲香蕉成人av网站在线观看| 高清一区二区三区四区| 精品噜噜噜噜久久久久久久久试看 | 欧美久久九九| 色哟哟免费网站| 91精品91| 国内外成人激情免费视频| 希岛爱理av一区二区三区| 伊人久久婷婷色综合98网| 日韩国产一区二区三区| 午夜老司机精品| 国模精品一区| 色就是色欧美| 精品视频日韩| 亚洲高清视频在线观看| 欧美亚洲高清| 一区二区三区国| 欧美肥老太太性生活| 亚洲永久激情精品| 天天射综合网视频| 99久久久无码国产精品性色戒| 香蕉综合视频| 免费的一级黄色片| 亚洲性色视频| 欧美一级在线看| 日韩精品一区第一页| 欧美成人福利在线观看| 精品无人码麻豆乱码1区2区| 深爱五月综合网| 国产91色综合久久免费分享| 亚洲精品国产成人av在线| 99久久免费视频.com| 亚洲精品成人无码| 国产精品免费视频一区| 久久99久久99精品免费看小说| 一区二区三区高清在线| 人人干人人干人人干| 一本在线高清不卡dvd| 中文字幕视频在线播放| 91精品国产乱码久久蜜臀| 亚洲xxx在线| 亚洲毛片在线观看| 91九色在线porn| 久久91亚洲精品中文字幕| 草草在线观看| 国产精品亚洲综合天堂夜夜| 97视频一区| 欧美日韩电影一区二区三区| 999久久久国产精品| 欧美这里只有精品| 媚黑女一区二区| 中文字幕在线视频一区二区| 成人高清视频在线观看| 免费网站在线高清观看| 亚洲精品一卡二卡| 久久精品视频5| 欧美一区二区不卡视频| 天堂在线视频免费观看| 日韩在线观看视频免费| 成人av影院在线观看| 国产裸体写真av一区二区 | 美女福利一区二区| 91久久精品一区| 日韩大尺度在线观看| 一区二区三区欧美在线| 99精品免费| 中文字幕 欧美日韩| 91网址在线看| 青青青在线免费观看| 色av综合在线| 后进极品白嫩翘臀在线视频| 最近2019中文免费高清视频观看www99 | 中文字幕在线视频一区二区| 久久久久久电影| 久久久久无码精品国产| 欧美日韩免费不卡视频一区二区三区 | 国产亚洲一区二区三区在线观看| 欧美老熟妇一区二区三区| 色老头久久综合| 天天操天天干天天| 精品国产欧美成人夜夜嗨| 91av亚洲| 国产一区精品在线| 牛牛国产精品| 久久国产精品国产精品| 久久日韩粉嫩一区二区三区| 精品少妇theporn| 在线成人免费观看| 永久免费av在线| 欧亚精品在线观看| 黄色免费大全亚洲| 欧美交换配乱吟粗大25p| 久国产精品韩国三级视频| 色欲狠狠躁天天躁无码中文字幕| 午夜精品成人在线| 99久久精品国产一区二区成人| 色爱精品视频一区| 性欧美freehd18| 欧美日韩无遮挡| 国产亚洲精品久久久久婷婷瑜伽| 黄色av电影网站| 亚洲综合清纯丝袜自拍| 99久久国产免费| 久久成人精品一区二区三区| 欧美激情福利| 亚洲最新在线| 毛片av一区二区| 后入内射无码人妻一区| 欧美猛男gaygay网站| av在线天堂| 国产专区欧美专区| 久久一区91| xxxx在线免费观看| 日韩一区中文字幕| 99热这里只有精品1| 久久91亚洲人成电影网站| 四虎影视精品永久在线观看| 一区二区三区的久久的视频| 久久99国产精品成人| 欧美一级片在线视频| 91精品国产综合久久婷婷香蕉| 国产高清一区二区三区视频 | 蜜桃精品噜噜噜成人av| 无遮挡又爽又刺激的视频| 国产欧美一区二区在线观看| 国产精品午夜一区二区| 日韩一中文字幕| 精品国产亚洲一区二区在线观看 | 精品视频在线播放免| 成人影院av| 亚洲 国产 日韩 综合一区| 久久99精品久久久久久国产越南| 欧美大片xxxx| 亚洲成人黄色网| 二区三区不卡| 亚洲综合首页| 国产91丝袜在线观看| 伊人久久综合视频| 在线a欧美视频| 粉嫩av国产一区二区三区| 亚洲国产精品无码观看久久| 91免费精品国自产拍在线不卡| 久久精品视频2| 久久精品免费电影| 久久夜色电影| 午夜两性免费视频| 一区二区在线电影| 色吊丝在线永久观看最新版本| 国产精品视频最多的网站| 91精品二区| 亚欧洲乱码视频| 91.com视频| 蜜桃视频在线观看播放| 亚洲成人网上| 成人免费毛片app| 波多野结衣爱爱| 欧美黑人一级爽快片淫片高清| 在线日韩一区| 国内自拍第二页| 日韩欧美在线免费| 国产丝袜在线| 欧美日韩免费精品| 国产91露脸合集magnet| 亚洲午夜无码久久久久| 欧美日本国产在线| 欧美三级美国一级| yjizz视频| 欧美人成免费网站| 在线观看特色大片免费视频| 裸体裸乳免费看| 国产日韩影视精品| 亚洲精品久久久久久动漫器材一区| 日本久久久久久久久久久| 国产字幕视频一区二区|