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

欧美大片日本大片免费观看| 中文字幕一区二区人妻电影| 最近中文字幕在线视频| 久久的色偷偷| 日韩精品三区四区| 亚洲精品v天堂中文字幕| 亚洲成色www久久网站| 久青草免费视频| 在线视频成人| 欧美经典三级视频一区二区三区| 午夜欧美不卡精品aaaaa| 国产精品自在自线| 91看片在线观看| 久久av综合| 欧美日韩在线看| 精品免费国产| 日本五十路女优| 66精品视频在线观看| 亚洲美女淫视频| 国产精品视频网站| 能直接看的av| 成人交换视频| 国产嫩草影院久久久久| 91精品网站| 四虎免费在线视频| 国产精品亚洲四区在线观看| 国产精品美女久久久久aⅴ| 日韩免费中文字幕| 天天躁日日躁aaaa视频| 裤袜国产欧美精品一区| 久久婷婷成人综合色| 日本一欧美一欧美一亚洲视频| 在线免费看av网站| 国产一区二区三区黄网站| 日韩欧美黄色动漫| 日韩精品国内| 亚洲一级av毛片| 99久久99视频只有精品| 欧美精品日韩一本| 性生活免费观看视频| 国产黄色片av| 日韩天堂av| 亚洲色图国产精品| 艹b视频在线观看| www.在线视频| 成年人国产精品| 国产精品69av| 欧美风情第一页| jlzzjlzz亚洲女人| 在线91免费看| 久草免费福利在线| 神马久久高清| 久久精品国产久精国产爱| 久久成人人人人精品欧| 无码av免费精品一区二区三区| 91美女精品| 国产欧美一区二区精品性色超碰| 国产一区二区在线网站| www.亚洲激情| 视频精品一区二区| 欧美成人亚洲成人| 亚洲蜜桃精久久久久久久久久久久| 美脚恋feet久草欧美| 精品福利视频导航| 尤物国产精品| 天堂在线观看av| 麻豆精品一区二区av白丝在线| 国产成人+综合亚洲+天堂| 中文字幕超碰在线| 久久久9色精品国产一区二区三区| 欧美一卡二卡三卡四卡| 日本三级免费观看| www免费在线观看| 亚洲老司机在线| 男女激烈动态图| 日韩精品亚洲人成在线观看| 久久久精品综合| 2022国产精品| 亚洲国产精品无码久久| 免费精品视频最新在线| 久久久久久91香蕉国产| 99久久久无码国产精品不卡| 国产香蕉精品| 宅男在线国产精品| 欧美午夜精品一区二区| 国产一区二区三区四区五区3d | 欧美性猛交xxxxx水多| 国产日韩一区二区在线| 国产精品扒开做爽爽爽的视频| 99精品久久只有精品| 亚洲一区二区三区777| 18国产免费视频| 狠狠色丁香久久婷婷综| 国产精品99蜜臀久久不卡二区| 在线观看免费高清视频| 国产成人综合在线播放| 成人深夜直播免费观看| 欧美日韩在线视频播放| 国产欧美日本| 久久免费观看视频| 国模无码国产精品视频| 亚洲永久字幕| 91成人免费观看网站| 久久精品国产亚洲AV无码男同| 婷婷亚洲综合| 2019精品视频| 91香蕉一区二区三区在线观看 | 日本不卡在线观看| 天堂av手机版| 国产精品麻豆久久久| www精品久久| 日本动漫同人动漫在线观看| 中文字幕一区二区不卡| 亚洲一区二区四区| av在线日韩国产精品| 久久久精品一品道一区| 黄色一级大片免费| 香蕉成人app免费看片| 男人添女荫道口女人有什么感觉| 欧美婷婷久久| 高清毛片aaaaaaaaa片| 国产成人99久久亚洲综合精品| 国产精品视频1区| 可以免费观看的毛片| 国产欧美精品一区二区色综合| 国内精品国产三级国产99| 国产一二区在线| 欧美香蕉大胸在线视频观看 | 99久久99久久精品免费| 九九精品在线| 欧美激情一二区| 91国偷自产中文字幕久久| 国产专区欧美精品| 亚洲r级在线观看| 国产一级片在线播放| 国产精品人人做人人爽人人添| 国产 日韩 欧美在线| 欧美高清一级片| 色伦专区97中文字幕| 日韩a级片在线观看| 欧美视频导航| 欧美一级片在线播放| 精品国产99久久久久久宅男i| 国内精品久久久久影院色| 欧美最大成人综合网| 瑟瑟视频在线看| 精品视频1区2区| 性鲍视频在线观看| 国产欧美啪啪| 欧美黑人xxxⅹ高潮交| 久久夜色精品国产噜噜亚洲av| 国产不卡视频在线播放| 毛片av在线播放| 天堂va在线高清一区| 日韩av在线免费| 女人黄色一级片| 日韩综合一区二区| 蜜桃麻豆www久久国产精品| av网在线观看| 欧美在线播放高清精品| 精品国产一二区| 欧美视频一区| 国产91精品入口17c| www.久久热.com| 欧美日韩综合一区| 极品蜜桃臀肥臀-x88av| 久久精品国产一区二区三| 在线观看亚洲视频啊啊啊啊| 国产日韩在线观看视频| 欧美激情图片区| 三级无遮挡在线观看| 最新国产の精品合集bt伙计| 波多野结衣之无限发射| 亚洲成人精品综合在线| 日韩毛片在线观看| 国产传媒免费在线观看| 国产成人精品三级麻豆| 毛片在线播放视频| 九九亚洲精品| 亚洲一区二区少妇| 91jq激情在线观看| 亚洲男人天堂网| 国产无码精品久久久| 成人动漫一区二区在线| 无码少妇一区二区三区芒果| 国产精品传媒| 欧洲s码亚洲m码精品一区| 亚洲美女福利视频| 高潮白浆女日韩av免费看| 国产123在线| 亚洲一区欧美激情| 亚洲欧洲精品在线| 福利欧美精品在线| 国产精品激情自拍| 女人偷人在线视频| 天天av天天翘天天综合网色鬼国产| 丰满少妇高潮一区二区| av成人天堂| 日韩激情视频| 亚洲日本va午夜在线电影| 456国产精品| 黄色在线观看网站| 国产偷国产偷亚洲清高网站| 国产有码在线观看| 欧美午夜性色大片在线观看| 1024手机在线视频| 中文字幕第一区综合| 在线观看av日韩| 国产一区二区三区四区五区| 欧美性在线视频| 黄色成人在线| 亚洲天堂免费在线| 波多野结衣高清视频| 一区二区三区丝袜| av影片在线播放| 日一区二区三区| 欧美大片在线播放| 欧美一区二区| 国产精品播放| 亚洲伦理一区二区| 国产精品av网站| 天堂√8在线中文| 国产视频精品xxxx| www.爱爱.com| 3d动漫精品啪啪| 自拍偷拍第八页| 欧美午夜影院在线视频| 日韩精品一区二区av| 亚洲乱码中文字幕| 亚洲欧美精品久久| 国产喷白浆一区二区三区| aa片在线观看视频在线播放| 丁香天五香天堂综合| 国产日韩av网站| 在线观看免费一区二区| 国产欧美日韩综合精品二区| 97色婷婷成人综合在线观看| 青草青草久热精品视频在线网站| 92久久精品| 久久免费视频网站| 密臀av在线| 欧美日本精品在线| 六月丁香色婷婷| 日韩成人激情| 久久手机精品视频| 成人欧美亚洲| 亚洲精品之草原avav久久| 男人天堂一区二区| 欧美性20hd另类| 久久午夜免费视频| 中文av一区二区| 国产精品美女高潮无套| 久久久不卡网国产精品一区| 特级西西人体wwwww| 久久综合av免费| 免费毛片视频网站| 国产调教视频一区| 亚洲一级片免费观看| 狠狠色丁香婷婷综合久久片| 亚洲成人手机在线观看| 亚洲精品国产日韩| 小说区图片区图片区另类灬| 麻豆一区在线| 成人av免费在线看| 日韩免费va| 欧美激情综合色综合啪啪五月| 91香蕉在线观看| 伊人久久免费视频| 天堂中文在线看| 日韩电影中文字幕| 久久精品a一级国产免视看成人| 亚洲系列中文字幕| 欧美成人xxx| 亚洲欧美一区二区三区四区 | 日日摸夜夜添夜夜添精品视频| 成年网站在线免费观看| 蜜桃av噜噜一区| 色婷婷狠狠18禁久久| 成人av高清在线| 不卡一区二区在线观看| 韩国视频一区二区| 亚洲少妇一区二区| 久久婷婷成人综合色| 美国精品一区二区| 亚洲一区二区三区激情| 91制片厂在线| 亚洲国产一区二区三区| 精品人妻一区二区三区免费看 | 懂色av成人一区二区三区| 日韩精品在线观看视频| 日本在线播放| 国产一区二区三区毛片| av黄在线观看| 国产91网红主播在线观看| 欧美91在线|欧美| 国产九色精品| 2020最新国产精品| 日韩精品无码一区二区三区| 欧美韩日精品| 成人免费视频久久| 成人免费高清视频| 国产亚洲精品精品精品| 性做久久久久久久久| 久久久久久久久久91| 91久久国产最好的精华液| wwwwww国产| 欧美一区二区人人喊爽| 日韩av高清在线| 欧美久久久精品| 日韩中文在线播放| 国产精品久久电影观看| 在线精品视频一区| 亚洲欧美日韩精品在线| 一本久久知道综合久久| 欧美大片久久久| 久久精品无码一区二区三区| 亚洲av无码乱码国产精品| 成人午夜私人影院| 在线观看亚洲大片短视频| 亚洲国产成人高清精品| 亚洲第一黄色网址| 成人免费av网站| 亚洲成人午夜影院| 夜夜嗨aⅴ一区二区三区| 亚洲精品久久久久久久久久久久| 日本在线看片免费人成视1000| 欧美亚州一区二区三区| av综合网址| 成人黄色片视频网站| 欧美视频免费| 中文字幕精品—区二区日日骚| 国产伦理一区| 午夜不卡久久精品无码免费| 91麻豆精品秘密| 国产黑丝一区二区| 成人丝袜高跟foot| 日韩高清第一页| 粉嫩一区二区三区在线看| 久久av红桃一区二区禁漫| 欧美午夜无遮挡| 深夜福利视频一区| 2019中文字幕在线观看| 日韩欧美ww| 在线国产精品网| 精品在线一区二区| 丝袜熟女一区二区三区 | 亚洲一区二区观看| 亚洲综合色婷婷| 综合激情网五月| 亚洲精品久久久久中文字幕欢迎你 | 性欧美video另类hd尤物| 色播亚洲婷婷| 麻豆国产欧美一区二区三区| av在线免费播放网址| 欧美性做爰猛烈叫床潮| 亚洲AV无码一区二区三区少妇| 美女精品视频一区| 91国内精品| 777精品久无码人妻蜜桃| 日本亚洲三级在线| 日韩中文字幕在线精品| 日本动漫同人动漫在线观看| 成人啪啪免费看| 欧美日韩精品| 国产激情视频网站| 好吊成人免视频| 第一福利在线| 国内精品久久久久久中文字幕| 波多野结衣在线一区二区| 欧美大片在线播放| 国产亚洲综合性久久久影院| 一级全黄裸体免费视频| 欧美成人网在线| 日韩影视在线观看| wwwwww.色| 亚洲免费观看高清完整版在线观看熊 | 少妇精品一区二区三区| 色噜噜狠狠一区二区三区果冻| 99青草视频在线播放视| 成人在线视频网| 狼人天天伊人久久| 伊人婷婷久久| 国产高清久久久久| 国产成人综合欧美精品久久| 在线一区二区日韩| 是的av在线| 亚洲精品一区国产精品| 国产99精品视频| 欧美一区二区激情视频| 中文字幕无线精品亚洲乱码一区| 日韩最新av| 青青青国产在线视频| 有坂深雪av一区二区精品| 三区在线视频| 999热视频在线观看| 久久一区亚洲| 久草中文在线视频| 日韩精品中文字幕一区| 刘亦菲一区二区三区免费看| 美女av免费观看|