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

動態(tài)JSON怎么處理?Spring Boot五種強大的處理方式

開發(fā) 前端
在Web應用開發(fā)中,面對日益復雜的業(yè)務場景,客戶端傳遞的JSON數據可能并不是固定結構,如可變字段、嵌套對象或用戶自定義配置。

環(huán)境:SpringBoot3.4.2

1. 簡介

在Web應用開發(fā)中,面對日益復雜的業(yè)務場景,客戶端傳遞的JSON數據可能并不是固定結構,如可變字段、嵌套對象或用戶自定義配置。

首先,我們來看如下的場景:

public class Person {
  private String name ;
  private Integer age ;
  // getters, setters
}
@PostMapping("/create")
public Person queryUser(@RequestBody Person person) {
  return person ;
}

當我們通過如下的請求body訪問時:

圖片圖片

控制臺輸出

圖片圖片

未知的email字段。

注:該錯誤在當前我使用的Spring Boot下是需要開啟如下配置才會出現上面的錯誤

spring:
  jackson:
    deserialization:
      fail-on-unknown-properties: true

傳統(tǒng)固定DTO難以滿足此類需求,因此需要API具備處理動態(tài)JSON Body的能力。Spring Boot憑借其靈活的請求處理機制,為我們提供了多種應對方案,能夠有效支持結構不固定的請求數據,從而提升接口的靈活性和復用性。

本文將介紹在Spring Boot中處理動態(tài)JSON Body的5種常用方式。

2.實戰(zhàn)案例

2.1 使用Map集合

使用 Map<String, Object> 接收動態(tài)JSON Body,可靈活處理結構不確定的請求數據。Spring Boot自動將JSON鍵值對映射為Map條目,適用于字段可變、嵌套復雜或用戶自定義的場景,結合業(yè)務邏輯動態(tài)解析,提升接口適應性與擴展性。

@PostMapping("/way1")
public ResponseEntity<?> way1(@RequestBody Map<String, Object> body) {
  return ResponseEntity.ok(body) ;
}

圖片圖片

? 優(yōu)點:靈活,支持任意字段;無需預定義DTO;易于動態(tài)處理。

? 缺點:類型不安全;易出錯;缺乏結構校驗;代碼可讀性差。

2.2 使用JsonNode類型

使用 JsonNode 可精確解析任意結構的動態(tài)JSON Body。作為Jackson提供的樹模型,它支持遍歷、查詢和類型判斷,適合復雜嵌套或需深度操作的場景,結合ObjectMapper靈活處理,是處理不確定JSON的強力方案。

@PostMapping("/way2")
public ResponseEntity<?> createUser(@RequestBody JsonNode body) {
  System.err.printf("解析email字段: %s%n", body.get("email").asText()) ;
  return ResponseEntity.ok(body) ;
}

輸出結果

圖片圖片

解析email字段: pack@gmail.com

? 優(yōu)點:結構靈活,支持復雜嵌套;可精確訪問任意節(jié)點;無需定義實體類。

? 缺點:處理深層結構時代碼冗長。

2.3 DTO + 動態(tài)字段(Map)

有時你已知 80% 的字段,但需要允許額外字段。這時候我們可以通過 Jackson 注解讓 Person 類更具靈活性。

修改實體Person:

public class Person {
  private String name ;
  private Integer age ;
  private Map<String, Object> extra = new HashMap<>();
  @JsonAnySetter
  public void setExtra(String key, Object value) {
      extra.put(key, value);
  }
  @JsonAnyGetter
  public Map<String, Object> getExtra() {
    return extra;
  }
}
Controller接口
@PostMapping("/way3")
public ResponseEntity<?> way3(@RequestBody Person person) {
  System.err.println(person.getExtra()) ;
  return ResponseEntity.ok(person) ;
}
輸出結果

圖片圖片

{email=pack@gmail.com}

? 優(yōu)點:強類型 + 靈活性;Jackson自動捕獲未知字段

? 缺點:模型稍顯復雜

2.4 使用ObjectNode

ObjectNode 是 JsonNode 的可變子類,適合處理動態(tài)JSON Body。它提供增刪改查方法,可靈活構建和修改JSON結構,結合 ObjectMapper 使用,適用于需動態(tài)生成或修改JSON的場景,操作直觀且功能強大。

@PostMapping("/way4")
public ResponseEntity<?> way4(@RequestBody ObjectNode body) {
  body.set("author", new TextNode("pack_xg")) ;
  body.set("age", new IntNode(34)) ;
  return ResponseEntity.ok(body) ;
}

這里我們添加author字段,同時修改了age字段。

圖片圖片

? 優(yōu)點:可動態(tài)增刪改JSON;操作靈活;適合構建和修改結構。

? 缺點:需要手動操作邏輯。

2.5 動態(tài)Json驗證

動態(tài)JSON Body因結構不固定,傳統(tǒng)基于DTO的注解驗證(如@NotNull)難以直接應用。當使用Map、JsonNode等接收數據時,字段名和層級不確定,導致無法在編解碼階段自動校驗。這時候我們可以通過JSON Schema驗證這種動態(tài)的JSON數據。

首先,引入如下依賴

<!--該依賴用來生成要驗證的json schema文件-->
<dependency>
  <groupId>com.github.victools</groupId>
  <artifactId>jsonschema-generator</artifactId>
  <version>4.38.0</version>
</dependency>
<!--該依賴用來校驗json數據-->
<dependency>
  <groupId>com.networknt</groupId>
  <artifactId>json-schema-validator</artifactId>
  <version>1.5.6</version>
</dependency>

接下來,我們針對Person對象生成對應的Schema

SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12, OptionPreset.PLAIN_JSON) ;
// 設置必須的字段
configBuilder.forFields()
  .withRequiredCheck(field -> "name".equals(field.getName()))
  .withRequiredCheck(field -> "age".equals(field.getName())) ;
// 構建SchemaGeneratorConfig
SchemaGeneratorConfig config = configBuilder.build();
// 創(chuàng)建SchemaGenerator實例
SchemaGenerator generator = new SchemaGenerator(config);
// 根據User類生成Schema內容
JsonNode jsonSchema = generator.generateSchema(targetType);
// 將JsonNode轉換為ObjectNode以便修改
ObjectNode schemaObject = (ObjectNode) jsonSchema;
// 設置additionalProperties為false,禁止額外屬性
schemaObject.put("additionalProperties", true);
// 打印生成的JSON Schema
return jsonSchema.toPrettyString() ;

內容如下:

圖片圖片

最后,我們在Controller接口中進行驗證

@PostMapping("/validate")
public ResponseEntity<?> validate(@RequestBody ObjectNode body) throws Exception {
  InputStream is;
  try {
    is = new ClassPathResource("schemas/person.json").getInputStream();
  } catch (IOException e) {
    throw new RuntimeException(e) ;
  }
  JsonSchema schema = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012).getSchema(is) ;
  List<String> ret = schema.validate(body).stream().map(msg -> msg.getMessage()).toList() ;
  return ResponseEntity.ok(ret) ;
}
驗證結果

圖片

關于這里的錯誤提示內容,我們可以自定義 jsv-messages_zh_CN.properties國際化資源文件。

責任編輯:武曉燕 來源: Springboot全家桶實戰(zhàn)案例
相關推薦

2025-08-08 01:55:00

SpringJSON日期

2023-07-10 08:00:13

架構Rest返回值

2023-10-08 20:31:18

React

2025-02-07 09:11:04

JSON對象策略

2025-07-29 04:11:00

SpringJSON數據

2009-08-19 17:30:38

C#轉義字符

2009-08-17 17:28:23

C#轉義字符

2010-01-13 17:23:36

VB.NET動態(tài)事件

2025-04-30 08:39:33

SpringMVC接口

2017-04-17 10:05:51

Hadoop錯誤方式

2009-12-31 14:25:19

Silverlight

2025-01-26 00:00:25

限流組件HTTP

2025-10-29 01:45:00

toString()SpringJackson

2021-03-31 09:11:27

URLErrorHTTPError

2010-01-18 16:58:29

VB.NET Over

2011-07-08 10:57:24

主域控制器額外域控制器AD

2024-04-07 08:50:00

GenAIAI人工智能

2025-01-27 12:19:51

2011-11-25 10:25:27

SpringJava

2009-07-21 15:47:35

JDBC批處理
點贊
收藏

51CTO技術棧公眾號

在线三级中文| 97久久人国产精品婷婷| 日韩欧美国产大片| 在线观看一区不卡| 久久免费一级片| 五月婷婷六月色| 免费一级片91| 欧美寡妇偷汉性猛交| 毛茸茸多毛bbb毛多视频| 日本一道高清亚洲日美韩| 亚洲素人一区二区| 噜噜噜噜噜久久久久久91| 国产精品久久777777换脸| 亚洲日本久久| 久久在线免费观看视频| 青青草视频播放| 欧美欧美在线| 欧美视频一区在线| 久久久久久久中文| 影音先锋在线视频| 国产精品少妇自拍| 精品在线视频一区二区| 一区二区日韩视频| 天堂一区二区在线免费观看| 欧美理论电影在线观看| 欧美激情视频二区| 亚洲制服一区| 精品sm在线观看| 亚洲无在线观看| 91精品国产经典在线观看| 黄色成人在线免费| 成人区一区二区| 成人黄视频在线观看| 欧美国产日韩亚洲一区| 久久国产一区二区| 黄色a在线观看| 国产精品一区二区91| 国产精品视频精品视频| 秋霞精品一区二区三区| 亚洲国产日本| 久久全国免费视频| 欧美日韩在线观看免费| 91精品国产乱码久久久久久| 伊人亚洲福利一区二区三区| 偷拍女澡堂一区二区三区| 国产精品tv| 欧美xxxx在线观看| 男男受被啪到高潮自述| 综合久久av| 欧美人成免费网站| 污网站在线免费| 欧美一级做a| 欧美日韩日日夜夜| 蜜臀av免费观看| a成人v在线| 欧美日韩中文精品| 久久这里只精品| 欧美性生活一级| 欧美日韩三级一区二区| 国产一级特黄a大片免费| 国产亚洲一区二区手机在线观看| 日本乱码高清不卡字幕| 熟妇人妻va精品中文字幕 | 免费观看毛片网站| 国产成人免费在线视频| 国产日本一区二区三区| 无码国产精品一区二区色情男同| av午夜精品一区二区三区| 国产综合精品一区二区三区| 天堂中文在线观看视频| 久久蜜桃香蕉精品一区二区三区| 日本一区二区精品| 在线免费观看的av网站| 亚洲欧美日韩国产综合| 成年人深夜视频| 深夜成人在线| 91国偷自产一区二区三区观看 | 中文字幕一区二区三区精彩视频 | 久久久免费观看| 精品午夜福利在线观看| 亚洲制服av| 国产欧美在线视频| 欧美熟妇交换久久久久久分类| 99精品视频一区二区三区| 麻豆av一区| 老司机精品影院| 亚洲成人综合网站| 91热这里只有精品| 97久久综合区小说区图片区| 亚洲精品国产电影| 日韩av片在线| 亚洲无吗在线| 国产精品久久久久9999| 国产av精国产传媒| 久久网站热最新地址| 亚洲视频精品一区| 超碰在线资源| 欧美丰满嫩嫩电影| 美女久久久久久久久久| 66久久国产| 青草青草久热精品视频在线网站| 亚洲香蕉在线视频| www.欧美色图| 在线视频不卡一区二区三区| 国产传媒在线观看| 69精品人人人人| 最近中文字幕无免费| 亚洲欧美综合久久久| 91av在线看| 国产高清视频免费观看| 国产欧美一区二区在线| 五月丁香综合缴情六月小说| 91精品国产66| 亚洲欧洲在线免费| 国产一级特黄视频| 精品一区二区在线免费观看| 精品中文字幕人| 在线免费av导航| 欧美日韩另类国产亚洲欧美一级| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产精品三区在线| 麻豆视频在线免费观看| 色综合天天综合网天天狠天天| 激情久久综合网| 色呦哟—国产精品| 国产99视频在线观看| 黄色片一区二区| 亚洲美女偷拍久久| 97人人爽人人| 成人激情在线| 日韩美女视频中文字幕| 婷婷婷国产在线视频| 亚洲一区二区3| 人妻av一区二区三区| 99精品美女| 国产精品日日摸夜夜添夜夜av| 亚洲欧美综合一区二区| 亚洲午夜免费视频| 一二三区视频在线观看| 一区二区电影| 成人性生交大片免费观看嘿嘿视频| 国产私人尤物无码不卡| 色综合色综合色综合色综合色综合| 一起草在线视频| 亚洲激情社区| 国产美女在线精品免费观看| 男女视频在线| 精品美女在线观看| 久久久久久天堂| 成人黄色a**站在线观看| 欧美在线观看黄| 亚洲乱码一区| 国产综合在线看| 俄罗斯嫩小性bbwbbw| 亚洲综合激情网| 国产女主播在线播放| 亚洲视频免费| 国产一区二区不卡视频| 川上优av中文字幕一区二区| 日韩美女在线视频| 国产一级aa大片毛片| 成人av在线资源| 黄色影院一级片| 你懂的视频欧美| 国产精品久久久久久av| 日本在线观看网站| 日韩欧美一级在线播放| 国产午夜久久久| 91亚洲精品乱码久久久久久蜜桃| 国产91美女视频| 欧美特黄一级大片| 亚洲一区二区三区在线视频| 免费男女羞羞的视频网站在线观看| 欧美www视频| 天堂а√在线中文在线新版| 中文字幕免费观看一区| 日本精品一区在线| 亚洲人体大胆视频| 日日噜噜噜噜夜夜爽亚洲精品| 欧洲午夜精品| 欧美激情三级免费| 精品美女视频在线观看免费软件 | 色综合成人av| 欧美系列日韩一区| 草视频在线观看| 91小视频在线观看| 成年人三级黄色片| 99国产成+人+综合+亚洲欧美| 欧美一进一出视频| 经典三级久久| 欧美专区福利在线| 国产精品剧情| 亚洲九九九在线观看| 国产又粗又猛又爽又黄视频 | 久久久99精品免费观看| 毛片毛片毛片毛片毛| 亚洲一区日韩| 亚洲区成人777777精品| 亚洲va久久| 91嫩草免费看| 中文另类视频| 97精品国产97久久久久久| 自拍视频在线免费观看| 亚洲国产欧美一区| 国产一区二区三区黄片| 欧美日韩精品在线播放| 黄视频网站免费看| 国产欧美综合在线| 日本69式三人交| 国产一区二区三区在线观看免费 | 毛片不卡一区二区| 国产精品裸体瑜伽视频| 香港欧美日韩三级黄色一级电影网站| 国产一区二区黄色| 日韩08精品| 国产一区二区在线免费视频| 精品91久久| 久久久久久久久国产精品| porn亚洲| 亚洲人午夜精品| 神马午夜电影一区二区三区在线观看| 51精品秘密在线观看| 亚洲成人av网址| 欧美日韩另类字幕中文| 欧美精品一区二区成人| 国产精品国产三级国产aⅴ入口 | 欧美日韩亚洲网| 国产亚洲欧美久久久久| 亚洲免费观看高清完整版在线| 精品人妻一区二区三区蜜桃视频| jlzzjlzz国产精品久久| 中文字幕久久久久久久| 国产乱淫av一区二区三区| wwwwwxxxx日本| 日本美女视频一区二区| 妺妺窝人体色www在线小说| 樱桃成人精品视频在线播放| 狠狠噜天天噜日日噜| 亚洲色图88| 丰满女人性猛交| 99久久夜色精品国产亚洲96| 视频一区二区在线| 日韩av在线中文字幕| 日韩欧美亚洲在线| 国产亚洲一卡2卡3卡4卡新区 | 亚洲一区二区三区乱码aⅴ蜜桃女| 成人18视频在线观看| 国产精品久久一区| 亚洲综合在线电影| 国产精品99久久久久久人 | 亚洲一区二区三| 国产精品久久久久久久久久辛辛 | 99久久亚洲精品| 正在播放久久| 午夜欧美精品| 人妻少妇精品无码专区二区| 国产亚洲一区在线| 欧美日韩第二页| 日韩成人dvd| 欧美一级xxxx| 国产成人8x视频一区二区| 日本人妻一区二区三区| 99久久婷婷国产| 91网站免费入口| 日本一区二区动态图| 91n在线视频| 亚洲综合在线五月| 日本三级小视频| 欧洲精品一区二区| 国产精品无码久久av| 欧美成人官网二区| 手机看片福利在线观看| 在线播放日韩精品| 成人影院在线观看| 国产91精品久久久久久久| 成人网ww555视频免费看| 91久久久亚洲精品| 加勒比色老久久爱综合网| 欧美日韩在线不卡一区| 亚洲mv大片欧洲mv大片| 欧美亚洲黄色片| 乱码第一页成人| 精品人妻一区二区三| 久久影院电视剧免费观看| 精品日韩在线视频| 一级女性全黄久久生活片免费| 一级片中文字幕| 欧美日韩mp4| 理论片中文字幕| 中文字幕日韩在线播放| 欧美性受ⅹ╳╳╳黑人a性爽| 欧美在线日韩在线| 成人在线精品| 欧美日韩国产一二| 欧美一区不卡| 国产成人亚洲精品无码h在线| 激情图片小说一区| 波多野结衣福利| 一区二区三区在线观看视频| 一级黄色在线观看| 精品三级在线观看| √天堂资源地址在线官网| 97激碰免费视频| 精品999日本久久久影院| 日韩国产高清一区| 在线看片一区| 亚洲一区二区偷拍| 国产视频在线观看一区二区三区| 妺妺窝人体色www聚色窝仙踪 | 亚洲AV无码成人片在线观看| 亚洲天堂开心观看| 漫画在线观看av| 91免费人成网站在线观看18| 九一亚洲精品| 日韩国产一级片| 国产精品自拍毛片| 国产美女网站视频| 色综合久久天天综合网| 人妻91麻豆一区二区三区| 久久精品国产一区二区三区 | 成人在线视频网址| 91综合久久| 国产精品区在线| 久久精品网站免费观看| 在线观看免费国产视频| 日韩精品一区二区三区中文精品| jyzzz在线观看视频| 青草成人免费视频| 欧美一级色片| av片在线免费| 国产a精品视频| 成年人av电影| 日韩一区二区三区三四区视频在线观看 | 日韩影院一区二区| 欧美精品亚洲二区| 五月香视频在线观看| 国产精品免费视频xxxx| 九九视频精品全部免费播放| 丰满人妻中伦妇伦精品app| 成人禁用看黄a在线| 久久中文字幕无码| 欧美成人精品3d动漫h| 午夜影院免费在线| 不卡的av一区| 伊人激情综合| 人妻体内射精一区二区三区| 亚洲二区在线观看| 内射无码专区久久亚洲| 国外成人在线直播| 美女网站色精品尤物极品姐弟| www.av中文字幕| av高清不卡在线| 亚洲不卡视频在线观看| 亚洲网址你懂得| 成人做爰免费视频免费看| 特级西西444www大精品视频| 麻豆成人91精品二区三区| 日本黄区免费视频观看| 7777精品久久久大香线蕉| 宅男网站在线免费观看| 国产传媒一区| 亚洲综合社区| 九九热久久免费视频| 欧美一区二区三区四区五区 | 一区二区三区av电影 | 成人性色生活片免费看爆迷你毛片| 久草免费在线观看视频| 亚洲精品美女免费| av有声小说一区二区三区| 一区二区三区在线观看www| 国产酒店精品激情| 日韩黄色a级片| 亚洲人成五月天| 四虎成人精品一区二区免费网站| 男女爱爱视频网站| av在线一区二区三区| 波多野结衣不卡| 久久亚洲国产精品| 国内精品麻豆美女在线播放视频| 国产福利视频在线播放| 国产精品久久久久婷婷 | 亚洲色图第三页| 亚洲一区av| 91免费黄视频| 国产欧美综合在线观看第十页| a级片在线免费看| 欧洲亚洲免费在线| 国产精品久久久久无码av| 国产十八熟妇av成人一区| 在线一区二区观看| 青春草免费在线视频| 日本一区精品| 成人午夜免费电影| 亚洲一区 中文字幕| 国产做受高潮69| 亚洲精品久久久| 国产成人精品无码免费看夜聊软件| 欧美一级理论片| 成人免费看黄| 国产女主播自拍|