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

告別硬編碼!用 SpringBoot 玩轉(zhuǎn)動(dòng)態(tài)表單與問卷生成神器

開發(fā) 后端
JSON Schema 的出現(xiàn),讓“表單開發(fā)”這件事從繁瑣變?yōu)閮?yōu)雅。? 后端不必再編寫冗長(zhǎng)的 DTO,前端也無需反復(fù)手寫輸入框和校驗(yàn)邏輯。? 只需一份 Schema,就能讓前后端共享同一個(gè)“真相”。

在企業(yè)級(jí)項(xiàng)目中,表單幾乎無處不在。從內(nèi)部管理后臺(tái),到客戶信息采集,再到問卷調(diào)查、審批流程配置,開發(fā)者常常陷入“表單地獄”: 字段多、規(guī)則復(fù)雜、需求變更頻繁。每次新增字段、調(diào)整驗(yàn)證規(guī)則,都意味著前后端同時(shí)改代碼、發(fā)版本、聯(lián)調(diào)測(cè)試——工作量翻倍,幸福感歸零。

有沒有可能,讓表單脫離硬編碼,讓前端和后端都只需遵守一份“契約”就能協(xié)同工作?

答案是:JSON Schema。 結(jié)合 Spring Boot 的靈活性和 JSON Schema 的結(jié)構(gòu)描述能力,我們可以輕松構(gòu)建出一個(gè)通用動(dòng)態(tài)表單系統(tǒng)——無需修改 Java 類,也無需改前端模板,所有表單結(jié)構(gòu)都由數(shù)據(jù)庫(kù)中的 JSON 控制,實(shí)時(shí)生效。

本文將帶你從原理到實(shí)現(xiàn),完整走通一條路徑:

/project
 ├── /src/main/java/com/icoderoad/form
 │     ├── controller/FormController.java
 │     ├── entity/DynForm.java
 │     └── repository/DynFormRepository.java
 ├── /src/main/resources/application.yml
 └── /frontend/vue/
        └── FormPage.vue

認(rèn)識(shí) JSON Schema:讓結(jié)構(gòu)成為“契約”

在傳統(tǒng)開發(fā)中,我們通常用 Java Bean 或 DTO 來定義數(shù)據(jù)結(jié)構(gòu)。但這意味著一旦字段變化,就必須重新編譯部署。 JSON Schema 的目標(biāo),就是讓數(shù)據(jù)結(jié)構(gòu)以 JSON 格式定義、校驗(yàn)、共享

它的設(shè)計(jì)理念很簡(jiǎn)單:

用 JSON 描述 JSON,讓數(shù)據(jù)自解釋,讓契約可傳遞。

下面是一個(gè)簡(jiǎn)化示例:

{
  "type": "object",
  "properties": {
    "name":  { "type": "string", "title": "姓名" },
    "age":   { "type": "number", "title": "年齡", "minimum": 0 },
    "city":  { "type": "string", "title": "城市", "enum": ["北京", "上海"] }
  },
  "required": ["name"]
}

它的強(qiáng)大之處在于:

場(chǎng)景

作用

接口校驗(yàn)

后端可直接基于 Schema 驗(yàn)證請(qǐng)求合法性

前端渲染

低代碼或自動(dòng)化前端可根據(jù) Schema 自動(dòng)生成表單

IDE 提示

VSCode 可識(shí)別 Schema,智能提示 JSON 字段與規(guī)則

也就是說,一旦定義好 Schema,前后端都可以對(duì)著這份 JSON 契約工作,再也不用為了字段變動(dòng)反復(fù)修改代碼。

動(dòng)態(tài)表單的真正挑戰(zhàn)是什么?

動(dòng)態(tài)表單的“難”,其實(shí)不在 UI,而在動(dòng)態(tài)性

挑戰(zhàn)點(diǎn)

說明

① 結(jié)構(gòu)未知

字段、類型、校驗(yàn)規(guī)則都由運(yùn)行時(shí)決定,傳統(tǒng) DTO 完全不適用

② 數(shù)據(jù)綁定復(fù)雜

嵌套字段、數(shù)組項(xiàng)動(dòng)態(tài)變動(dòng),容易引發(fā)前端渲染異常

③ 校驗(yàn)不同步

前后端兩套驗(yàn)證規(guī)則不一致,導(dǎo)致線上錯(cuò)誤數(shù)據(jù)

而 JSON Schema 正好從根上解決了這三個(gè)問題。接下來,我們就用它來構(gòu)建一個(gè)最小可運(yùn)行閉環(huán)

后端實(shí)戰(zhàn):Spring Boot + JSON Schema 校驗(yàn)

技術(shù)選型

模塊

技術(shù)

職責(zé)

后端

Spring Boot + json-schema-validator

存儲(chǔ)與校驗(yàn) Schema

前端

Vue3 + @jsonforms/vue

動(dòng)態(tài)渲染表單

數(shù)據(jù)

MySQL

存儲(chǔ)表單定義

通信

JSON

無額外協(xié)議依賴

實(shí)體類定義:/src/main/java/com/icoderoad/form/entity/DynForm.java

package com.icoderoad.form.entity;


import jakarta.persistence.*;
import lombok.Data;


/**
 * 動(dòng)態(tài)表單實(shí)體類
 * 用于存儲(chǔ)每個(gè)表單的結(jié)構(gòu)定義(JSON Schema)
 */
@Entity
@Data
@Table(name = "dyn_form")
public class DynForm {


    @Id
    private String id;


    private String name;


    @Column(columnDefinition = "TEXT")
    private String schema; // 存儲(chǔ) JSON Schema 定義
}

控制層:/src/main/java/com/icoderoad/form/controller/FormController.java

package com.icoderoad.form.controller;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.icoderoad.form.entity.DynForm;
import com.icoderoad.form.repository.DynFormRepository;
import com.networknt.schema.*;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;


import java.util.Map;
import java.util.Set;


/**
 * 動(dòng)態(tài)表單控制器
 * 提供表單 Schema 查詢與數(shù)據(jù)提交接口
 */
@RestController
@RequestMapping("/form")
@RequiredArgsConstructor
public class FormController {


    private final DynFormRepository repo;
    private final ObjectMapper mapper = new ObjectMapper();


    /** 獲取表單 Schema */
    @GetMapping("/{id}/schema")
    public Map<String, Object> getSchema(@PathVariable String id) throws Exception {
        DynForm form = repo.findById(id)
                .orElseThrow(() -> new RuntimeException("表單不存在"));
        return mapper.readValue(form.getSchema(), Map.class);
    }


    /** 提交并校驗(yàn)表單數(shù)據(jù) */
    @PostMapping("/{id}/submit")
    public String submit(@PathVariable String id, @RequestBody Map<String, Object> data) throws Exception {
        DynForm form = repo.findById(id)
                .orElseThrow(() -> new RuntimeException("表單不存在"));


        JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V201909);
        JsonSchema schema = factory.getSchema(form.getSchema());
        Set<ValidationMessage> errors = schema.validate(mapper.valueToTree(data));


        if (!errors.isEmpty()) {
            throw new RuntimeException("數(shù)據(jù)校驗(yàn)失敗:" + errors);
        }


        // 保存數(shù)據(jù)邏輯(省略)
        // repo.saveData(id, data);


        return "ok";
    }
}

依賴配置:pom.xml

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <!-- JSON Schema Validator -->
    <dependency>
        <groupId>com.networknt</groupId>
        <artifactId>json-schema-validator</artifactId>
        <version>1.4.0</version>
    </dependency>


    <!-- JSON 處理 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>


    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

前端實(shí)現(xiàn):Vue3 + @jsonforms/vue 自動(dòng)渲染

安裝依賴

npm install @jsonforms/vue @jsonforms/vue-vanilla axios

頁(yè)面文件:/frontend/vue/FormPage.vue

<template>
  <div class="container mt-4">
    <json-forms
      :data="formData"
      :schema="schema"
      :uischema="uiSchema"
      @change="formData = $event.data" />
    <button class="btn btn-primary mt-3" @click="submitForm">提交</button>
  </div>
</template>


<script setup>
import { ref, onMounted } from 'vue';
import { JsonForms } from '@jsonforms/vue';
import axios from 'axios';


const schema = ref({});
const uiSchema = ref({});
const formData = ref({});


onMounted(async () => {
  const res = await axios.get('/form/1/schema');
  schema.value = res.data;
});


const submitForm = async () => {
  await axios.post('/form/1/submit', formData.value);
  alert('提交成功!');
};
</script>

亮點(diǎn):

  • 后端修改 JSON Schema → 前端自動(dòng)更新表單;
  • 新增字段、修改枚舉、調(diào)整驗(yàn)證,全程無需改動(dòng)前端代碼;
  • 支持多端(H5 / 小程序 / PC)共用一份 Schema。

進(jìn)階玩法:從動(dòng)態(tài)到“低代碼”

功能方向

實(shí)現(xiàn)方式

可視化搭建

接入拖拽式表單設(shè)計(jì)器(如 FormMaking、amis),讓運(yùn)營(yíng)直接生成 Schema

版本控制

Schema 加 version 字段,實(shí)現(xiàn)灰度表單與歷史回溯

多端共用

統(tǒng)一 Schema 驅(qū)動(dòng) H5、小程序、Web 端渲染

流程集成

結(jié)合規(guī)則引擎與數(shù)據(jù)流轉(zhuǎn),升級(jí)為企業(yè)級(jí)低代碼平臺(tái)

總結(jié):Schema 是契約,更是自由

JSON Schema 的出現(xiàn),讓“表單開發(fā)”這件事從繁瑣變?yōu)閮?yōu)雅。 后端不必再編寫冗長(zhǎng)的 DTO,前端也無需反復(fù)手寫輸入框和校驗(yàn)邏輯。 只需一份 Schema,就能讓前后端共享同一個(gè)“真相”。

JSON Schema 不是什么銀彈,但它足夠?qū)嵱谩⑤p量、靈活。 對(duì)于中小企業(yè)、SaaS 平臺(tái)、問卷系統(tǒng)、信息采集工具而言,它幾乎是最具性價(jià)比的解決方案。

未來的表單開發(fā),不再是手動(dòng)堆疊組件,而是通過 Schema 去“聲明”它的存在。 這,才是告別硬編碼后的真正自由。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2023-10-31 12:42:00

Spring動(dòng)態(tài)增刪啟停

2025-04-17 02:00:00

2015-03-23 12:33:28

2009-05-18 10:11:06

MVCXML動(dòng)態(tài)表單

2022-02-16 10:07:07

IDEA斷點(diǎn)技巧

2023-10-10 09:07:23

2025-08-29 07:36:07

2023-09-08 09:10:33

SpringBoot微服務(wù)架構(gòu)

2023-04-27 07:57:52

AutoIt自動(dòng)化工具

2021-07-02 14:07:00

可視化Plotly漏斗圖

2009-02-04 08:52:55

動(dòng)態(tài)頁(yè)面XMLXSL

2015-09-28 14:27:12

硬編默認(rèn)選擇

2016-05-18 09:52:20

2025-07-02 09:36:56

2025-10-21 08:57:00

2017-08-15 17:30:52

WIFI信號(hào)路由器網(wǎng)絡(luò)

2025-01-21 11:46:26

2024-07-15 15:05:20

Python數(shù)據(jù)驅(qū)動(dòng)

2025-02-18 01:00:00

Astro系統(tǒng)AI

2020-03-23 14:55:52

Python可視化Plotly
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产在线精品免费av| 欧美va在线| 国产一区二区福利| 日韩在线观看免费网站 | 色哟哟无码精品一区二区三区| 国产原创在线观看| 国产精品88av| 久久久亚洲成人| 中文人妻一区二区三区| jvid一区二区三区| 一区二区三区资源| 九色一区二区| 在线免费观看一区二区| 亚洲精品中文字幕乱码| 亚洲精品久久视频| www.xxx亚洲| 国产在线电影| 国内精品免费**视频| 欧美成人一区在线| 37p粉嫩大胆色噜噜噜| 日韩一区二区三免费高清在线观看| 亚洲日本青草视频在线怡红院| 国产高清精品一区二区| 91在线视频免费播放| 亚洲精品极品少妇16p| 精品成人一区二区| 爱情岛论坛成人| 色图在线观看| 国产精品色一区二区三区| 成人在线免费网站| 中文字幕1区2区3区| 激情久久久久| 中文字幕视频一区二区在线有码| 永久av免费在线观看| 成人免费影院| 亚洲制服丝袜av| 亚洲国产婷婷香蕉久久久久久99 | 久久www人成免费看片中文| 久久久久国产一区二区三区四区| 91久久极品少妇xxxxⅹ软件| 香蕉污视频在线观看| 韩日成人在线| 日韩有码在线观看| 中文字幕丰满乱子伦无码专区| 国产精品一区二区美女视频免费看 | 红桃视频 国产| 综合另类专区| 亚洲成人自拍一区| 中文字幕在线观看一区二区三区| 你懂的在线观看视频网站| 国产精品一区二区x88av| 国产99久久精品一区二区永久免费 | 欧美日韩精品亚洲精品| 成人3d精品动漫精品一二三| 亚洲精品国产综合区久久久久久久| 无套白嫩进入乌克兰美女| 亚洲国产91视频| 欧美写真视频网站| 久久这里只有精品23| 在线免费看黄网站| 久久综合久色欧美综合狠狠| 精品不卡在线| 天天干视频在线观看| 国产黄人亚洲片| 亚洲最大的成人网| a级片免费观看| 国产麻豆精品95视频| 成人欧美一区二区三区黑人| 美女黄页在线观看| 日本sm残虐另类| 国产精品日本精品| 亚洲熟女乱色一区二区三区久久久| 久久亚洲二区| 国产不卡av在线免费观看| 99久热在线精品996热是什么| 亚洲三级国产| 97精品久久久| 毛片视频网站在线观看| 亚洲毛片视频| 久久99精品久久久久久青青91| 国产成人自拍网站| 欧美99在线视频观看| 欧美乱大交xxxxx| 青草草在线视频| 亚洲电影av| 91精品国产网站| 少妇一级淫片免费放中国 | 欧美激情第一页xxx| 午夜免费激情视频| 欧美三级网页| 海角国产乱辈乱精品视频| 日韩av免费网址| 久久久天天操| 日韩免费中文字幕| 在线观看中文字幕码| 久久午夜精品一区二区| 国产噜噜噜噜噜久久久久久久久| 一区二区三区精彩视频| 国产成人欧美日韩在线电影| 精品网站在线看| 搞黄视频在线观看| 亚洲日本青草视频在线怡红院| 国产美女作爱全过程免费视频| a级片免费在线观看| 色噜噜狠狠成人中文综合| 亚洲欧美日韩精品一区| 国产人与zoxxxx另类91| 亚洲第一精品夜夜躁人人爽| 欧洲av一区二区三区| 91精品国产麻豆国产在线观看| 欧美黑人xxxⅹ高潮交| 91在线视频在线观看| 美美哒免费高清在线观看视频一区二区| 成人在线小视频| www天堂在线| 久久久九九九九| 免费观看中文字幕| 亚洲精品福利电影| 3atv一区二区三区| 风间由美一二三区av片| 亚州av乱码久久精品蜜桃| 97在线精品国自产拍中文| 日本妇乱大交xxxxx| 国产精品1区二区.| 日韩精品伦理第一区| 四虎影院观看视频在线观看| 色综合久久88色综合天天| 中文字幕精品一区二区三区在线| 欧美aaaaaaaa牛牛影院| 影音先锋日韩有码| 国产极品美女高潮无套嗷嗷叫酒店| 丝袜诱惑亚洲看片| 国产精品视频入口| 日本在线视频网| 精品动漫一区二区| 色偷偷中文字幕| 国产一区二区三区四区二区| 久久久久久久久久久亚洲| 亚洲综合网av| 久久久精品免费免费| 国产日韩av网站| 亚洲精品毛片| 亚洲网在线观看| 日韩 欧美 综合| 国产毛片精品国产一区二区三区| 久久久久se| 91九色在线播放| 欧美一级精品在线| 战狼4完整免费观看在线播放版| 在线视频日韩| 国产精品手机视频| 日本乱理伦在线| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人在线视频| 日本免费不卡视频| 亚洲一区二区精品视频| 免费国偷自产拍精品视频| 99久久99视频只有精品| 国产成人精品免费久久久久| 天堂在线资源8| 亚洲国产精品天堂| 女同性αv亚洲女同志| 欧美在线首页| 亚洲一区二区中文| 国产精品久久麻豆| 欧美电影影音先锋| av黄色在线免费观看| 狠狠爱综合网| 99re在线观看| 国产网红女主播精品视频| 日韩欧美国产三级电影视频| 手机在线免费看片| 精品午夜一区二区三区在线观看| 亚洲免费视频一区| 久久影视精品| 久久精品视频网站| av官网在线观看| 亚洲精品午夜久久久| 91亚洲一区二区| 午夜亚洲福利| 国产九色91| 热三久草你在线| 亚洲天堂影视av| 在线不卡免费视频| 国产日韩欧美制服另类| 爱爱爱爱免费视频| 综合一区av| 久草一区二区| 午夜av成人| 久久综合五月天| 人妻无码一区二区三区久久99| 午夜av一区二区三区| 国产色视频一区二区三区qq号| 亚洲专区免费| 亚洲一区二区在线看| 日本一区二区乱| 91a在线视频| 理论在线观看| 欧美性高清videossexo| 爱爱视频免费在线观看| 成人免费看的视频| 91丨porny丨探花| 神马久久一区二区三区| 91免费在线视频| 忘忧草在线日韩www影院| 国产一区二区三区欧美| 精品人妻无码一区二区| 欧美日韩亚洲一区二区三区| 林心如三级全黄裸体| 国产成人自拍在线| 黄色av网址在线播放| 精品少妇3p| 91老司机在线| 在线一区av| 欧美成人性色生活仑片| 国产黄在线观看| 欧美大黄免费观看| 特级西西444www高清大视频| 亚洲一区国产视频| 亚洲AV无码成人精品区明星换面| 国产精品538一区二区在线| 国产免费人做人爱午夜视频| 欧美韩国日本在线观看 | 国产欧美久久久久| 天堂日韩电影| 91欧美精品午夜性色福利在线| 2020av在线| 色哟哟亚洲精品一区二区| 日本人妻丰满熟妇久久久久久| 欧美色视频一区| 欧美三级韩国三级日本三斤在线观看 | 亚洲午夜精品网| 免费成人深夜蜜桃视频| 91免费观看在线| 欧美图片自拍偷拍| 老司机午夜精品| 成人三级视频在线播放| 国内精品久久久久久久影视麻豆| 相泽南亚洲一区二区在线播放| 伊人久久亚洲| 国产免费成人av| 日韩a**中文字幕| 国产91精品久久久久久| 91麻豆免费在线视频| 精品一区二区三区中文字幕| 亚洲国产小视频| 99久久精品国产色欲| 欧美性视频一区二区三区| 亚洲精品77777| 夜夜嗨av一区二区三区| 91ts人妖另类精品系列| 国产日韩精品一区二区浪潮av | 乱码第一页成人| 免费看日本黄色| 午夜激情一区| 青草全福视在线| 这里只有精品在线| 亚洲图片小说在线| 日韩大片在线观看| 亚洲韩国在线| a看欧美黄色女同性恋| 91嫩草免费看| 日韩视频1区| www.久久久| a级日韩大片| 国产在线一区二区三区欧美 | 精品欧美一区二区在线观看视频| 亚洲高清在线一区| 国产欧美一区二区三区在线| 91精品影视| 国产欧美一区二区| 在线免费观看亚洲| 亚洲综合一区二区不卡| 91视频成人| 91蜜桃网站免费观看| 大型av综合网站| 97人人澡人人爽| 成人av影音| 欧美一区二区三区男人的天堂| 精品国产成人av在线免| 亚洲免费激情| 欧美日韩一区二区在线免费观看 | 99精品国产99久久久久久白柏| 久久精品女同亚洲女同13| 久久婷婷综合激情| 天天摸日日摸狠狠添| 国产精品福利一区二区三区| 免费视频91蜜桃| 成人欧美一区二区三区在线播放| 国产高潮国产高潮久久久91| 亚洲综合激情小说| 国产又大又黄视频| 欧美日韩国产首页在线观看| 性做久久久久久久久久| 日韩高清不卡av| 亚洲va久久久噜噜噜无码久久| 亚洲第一页在线| 北条麻妃在线| 欧美日韩福利电影| 日韩成人av电影| 国产欧美亚洲精品| av成人资源| 日韩在线第一区| 午夜欧美精品| 日本a视频在线观看| 强制捆绑调教一区二区| 欧美人与性动交α欧美精品 | 色婷婷精品久久二区二区密| 国产午夜精品美女毛片视频| 能免费看av的网站| 亚洲精品ww久久久久久p站| 国产无码精品视频| 色综合天天做天天爱| 国产美女裸体无遮挡免费视频| 亚洲国产日韩欧美在线99| av在线播放av| 91av在线国产| 97久久中文字幕| 欧美日韩精品久久| 国自产拍偷拍福利精品免费一| 日日碰狠狠丁香久燥| 成人免费毛片片v| 久久国产高清视频| 亚洲成av人片在线观看| 亚洲手机在线观看| 亚洲免费精彩视频| 日本色护士高潮视频在线观看| 456国产精品| 2020国产精品极品色在线观看| 欧美日韩亚洲免费| 亚洲国产精品一区制服丝袜| 做a视频在线观看| 99久久久精品免费观看国产蜜| 妺妺窝人体色WWW精品| 亚洲成av人综合在线观看| av av片在线看| 最新中文字幕亚洲| 成人欧美大片| 狠狠色噜噜狠狠色综合久| 亚洲高清不卡| 91超薄肉色丝袜交足高跟凉鞋| 国产精品欧美一级免费| 一级黄色大片网站| 中文字幕视频一区二区在线有码| 澳门成人av网| 日本一区二区三区视频在线观看| 亚洲精选一区| 老熟女高潮一区二区三区| 亚洲一级在线观看| 国产成人麻豆精品午夜在线| 中文字幕日韩精品有码视频| 久久99国产精品二区高清软件| 日韩av在线电影观看| 免费在线观看日韩欧美| 人妻少妇无码精品视频区| 色综合久久综合| 成人亚洲性情网站www在线观看| 欧美性在线观看| 亚洲系列另类av| 2025韩国理伦片在线观看| 国产欧美日韩在线视频| 男操女视频网站| xxxxxxxxx欧美| 成人国产精品久久| 国产成人免费高清视频| 成av人片一区二区| 男人天堂中文字幕| 亚洲嫩模很污视频| 国产综合色区在线观看| 天天久久人人| 国产在线观看一区二区| 男人操女人的视频网站| 91精品国产入口| 川上优av中文字幕一区二区| 国产日韩欧美二区| 一区二区动漫| 免费黄在线观看| 欧美一区二区三区视频免费| 黄色网在线免费观看| 国产精品一区二区三区四区五区| 一本不卡影院| 少妇的滋味中文字幕bd| 91精品国产日韩91久久久久久| sm国产在线调教视频| 精品日产一区2区三区黄免费 | 91国内揄拍国内精品对白| 欧美绝顶高潮抽搐喷水合集| 欧美三级理论片| 最新热久久免费视频| 刘亦菲久久免费一区二区| 国产精品91视频| 五月天综合网站| 久久久久久综合网| 欧美性生交xxxxxdddd| 幼a在线观看| 精品乱码一区二区三区| 久久国产精品区| 国语对白一区二区| 日韩最新免费不卡| www.神马久久|