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

国产精品18久久久久久久网站| 在线综合色站| 国产欧美日韩视频一区二区| 国产欧美中文字幕| 久久久久无码国产精品不卡| 窝窝社区一区二区| 欧美日韩国产中文| 黄色片网址在线观看| youjizz在线播放| 粉嫩av一区二区三区在线播放| 国产www精品| 久久久久久久中文字幕| 国产影视精品一区二区三区| 日韩欧美国产综合| 97公开免费视频| 国产精品一区hongkong| 国产精品人妖ts系列视频| 成人在线免费观看一区| 久草热在线观看| 好看的日韩av电影| 色999日韩欧美国产| 丰满大乳奶做爰ⅹxx视频| 一级欧美视频| 欧美专区在线观看一区| 色欲色香天天天综合网www| 日本在线观看视频| 久久久亚洲国产美女国产盗摄| 91视频免费在线观看| 中文字幕精品一区二区精| 99综合精品| 欧美3p在线观看| www精品美女久久久tv| 91久久久久久久久| 精品一区二三区| 亚洲精一区二区三区| 欧美成人免费在线视频| 九九热久久免费视频| 中文字幕精品—区二区| 久草免费资源站| 亚洲伦理一区二区| 精品视频在线视频| 美女黄色片视频| 无遮挡爽大片在线观看视频| 亚洲成人自拍偷拍| av在线com| 污污片在线免费视频| 亚洲欧美日韩久久精品| 在线码字幕一区| 求av网址在线观看| 中文字幕一区在线| 91手机视频在线| 成人黄色在线电影| 亚洲欧美一区二区三区孕妇| 一区二区三区三区在线| 秋霞影院午夜丰满少妇在线视频| 国产欧美精品国产国产专区| 日韩色妇久久av| 成人精品一区| 国产精品久久久久久久久免费丝袜| 亚洲va韩国va欧美va精四季| 在线视频二区| 自拍视频在线观看一区二区| av电影一区二区三区| 性欧美ⅴideo另类hd| 亚洲一区自拍偷拍| 国产手机免费视频| 国产免费拔擦拔擦8x在线播放| 无码av免费一区二区三区试看| 免费国产a级片| 美女100%一区| 欧美亚洲国产怡红院影院| 在线看的黄色网址| 国产精品白丝久久av网站| 欧美一级在线免费| 精品国产一区在线| 国产免费久久| 久久精品久久久久电影| 国产亚洲精品久久久久久打不开 | jizzjizz中国精品麻豆| 岛国精品视频在线播放| www黄色在线| 日本电影久久久| 精品少妇一区二区三区在线播放| 99re久久精品国产| 成人羞羞网站入口| 欧美俄罗斯乱妇| 久草手机在线视频| 精品无人码麻豆乱码1区2区| 国产不卡一区二区在线观看| 黄上黄在线观看| 亚洲桃色在线一区| 97国产精东麻豆人妻电影| 成人福利片在线| 精品久久久久久无| 色综合99久久久无码国产精品| 亚洲国产精品成人| 欧美一区二区三区免费观看| 中文字幕在线播出| 成人黄色小视频在线观看| 欧美一区二区在线视频观看| 在线看三级电影| 91成人看片片| 99re这里只有| 久久久久久久99| 亚洲GV成人无码久久精品| 亚洲一区成人| 成人黄色大片在线免费观看| 亚洲日本国产精品| 亚洲精品一二三区| 亚洲激情在线观看视频| 久久97久久97精品免视看秋霞| 中文字幕欧美在线| 六月丁香激情综合| 国产成人日日夜夜| 亚洲国产一区二区精品视频| 国产在线美女| 日韩三级视频在线看| 人人妻人人澡人人爽| 国内精品久久久久久久97牛牛| 欧美影院久久久| 日韩中文字幕综合| 亚洲三级在线免费| 日韩毛片在线免费看| 成人免费在线电影网| 久久久久99精品久久久久| 国产免费一级视频| 99久久99久久久精品齐齐| 91精品一区二区三区四区| 欧美aaaaaa| 亚洲视频一区二区| 丁香六月婷婷综合| av亚洲精华国产精华精华| 精品嫩模一区二区三区| 一区二区三区日本视频| 视频在线一区二区| 日韩久久久久久久久久| 久久人人爽人人爽| 欧美a在线视频| 欧美亚洲大陆| 98精品在线视频| 欧美综合视频在线| 亚洲成人资源网| 国产精品久久久久久亚洲色| 国内综合精品午夜久久资源| 99r国产精品视频| 羞羞视频在线观看不卡| 欧美一区二区国产| 欧美又粗又大又长| 国产激情偷乱视频一区二区三区| 在线一区亚洲| 精品久久亚洲| 九九精品在线观看| 亚洲免费一级片| 亚洲一区国产视频| 捆绑凌虐一区二区三区| 亚洲专区一区| 日韩精品一线二线三线| 免费在线成人激情电影| 色偷偷av一区二区三区| 91麻豆国产视频| 亚洲人成影院在线观看| 日本55丰满熟妇厨房伦| 国语精品一区| 久久综合色一本| 一二区成人影院电影网| 中文字幕免费国产精品| 国产夫妻在线观看| 午夜视黄欧洲亚洲| 黄色片网站免费| 久久成人久久鬼色| 国产精品视频一二三四区| 国产精品调教视频| 日韩av不卡电影| 日本中文字幕在线看| 欧美一卡二卡三卡| 日韩欧美不卡视频| 欧美激情一区二区| 又黄又爽又色的视频| 亚洲清纯自拍| 五月天色一区| 日韩中文字幕无砖| 91成人性视频| 91美女视频在线| 日韩免费电影网站| 久久久精品视频网站| 中文字幕日韩一区二区| 一级黄色片毛片| 日韩专区一卡二卡| 国产精品一二三在线观看| 精品女人视频| 国产精品自拍网| 538视频在线| 中文字幕欧美精品在线| 男人的天堂a在线| 欧美午夜精品一区| 国产精品a成v人在线播放| 国产三级精品视频| www.四虎精品| 美女视频网站久久| 3d动漫一区二区三区| 99久久夜色精品国产亚洲1000部| 国偷自产av一区二区三区小尤奈| 免费成人毛片| 欧美最猛性xxxxx(亚洲精品)| 毛片网站在线免费观看| 亚洲欧美日韩成人| 亚洲xxx在线| 欧美精品一二三四| 黄色一级视频免费看| 亚洲自拍偷拍av| 福利视频第一页| 91视频在线看| 国产精品偷伦视频免费观看了| 日韩av中文在线观看| 久久久久久久久久久99| 亚洲破处大片| 亚洲电影免费| 国产一区二区三区网| 国产中文一区二区| 亚洲免费一区三区| 成人久久一区二区| 欧美日韩国产网站| 538国产精品一区二区免费视频 | 色综合久久88| 日本在线观看www| 国产亚洲成av人片在线观看桃| 欧洲av在线播放| 日韩免费成人网| 国产农村妇女毛片精品久久| 欧美日韩成人一区二区| 日本视频免费观看| 色呦呦日韩精品| 国产99久久久| 黄色一区二区三区| 日韩欧美大片在线观看| 亚洲国产精品尤物yw在线观看| 粉嫩av性色av蜜臀av网站| 国产精品私人自拍| 娇妻被老王脔到高潮失禁视频| 972aa.com艺术欧美| 日批在线观看视频| 91在线精品一区二区三区| 国产精品久久AV无码| 成人avav在线| 国产白嫩美女无套久久| 99久久伊人久久99| 特大黑人巨人吊xxxx| 99精品视频在线播放观看| 五月天激情小说| zzijzzij亚洲日本少妇熟睡| 中文在线观看免费视频| 99久久国产综合精品色伊| 99久久人妻精品免费二区| 99re成人精品视频| 野外性满足hd| 国产日产欧美一区二区视频| wwwwww日本| 亚洲国产精品传媒在线观看| 老司机精品免费视频| 最新热久久免费视频| 少妇影院在线观看| 午夜精品一区二区三区电影天堂 | 精品国产一区二区国模嫣然| 性一交一乱一精一晶| 亚洲国产欧美日韩精品| 女人天堂在线| 日韩网站免费观看高清| gogo在线高清视频| 欧美激情综合亚洲一二区| 888av在线视频| 国产精品久久久久久一区二区| 亚洲国产综合在线观看| caoporn国产精品免费公开| 蜜桃久久久久| 天堂一区二区三区| 综合天天久久| www.浪潮av.com| 免费精品99久久国产综合精品| 在线a免费观看| 99久久婷婷国产精品综合| 永久免费毛片在线观看| 亚洲女人****多毛耸耸8| 国产精品第9页| 欧美日本不卡视频| 色呦呦中文字幕| 中文字幕成人精品久久不卡 | 亚洲国产精品久久人人爱蜜臀| 男人天堂2024| 欧美一卡2卡3卡4卡| 免费一级毛片在线观看| 日韩视频精品在线| 麻豆mv在线看| 92国产精品视频| 在线一级成人| 国产高清不卡无码视频| 久久精品午夜| 色欲欲www成人网站| 国产喷白浆一区二区三区| 国产午夜激情视频| 欧美另类videos死尸| 天天操天天爱天天干| 久久久国产精品一区| 欧美xo影院| 成人在线看片| 66国产精品| 91最新在线观看| www.亚洲色图| 日本aⅴ在线观看| 欧洲一区在线电影| 污污的视频网站在线观看| 精品国模在线视频| 三上悠亚激情av一区二区三区| 成人av资源| 亚洲激情中文在线| 欧美三级理论片| 91免费在线播放| 国产精品白浆一区二小说| 欧美一区二区在线不卡| 爱久久·www| 秋霞成人午夜鲁丝一区二区三区| 白白在线精品| 9色视频在线观看| 美国一区二区三区在线播放| 久久亚洲AV成人无码国产野外| 亚洲一区二区在线免费观看视频 | 国产网站欧美日韩免费精品在线观看| 美女av在线播放| 国产一区二区在线免费视频| 国产欧美久久一区二区三区| 黄色免费视频大全| 成人福利在线看| 国产污视频在线看| 日韩精品中文字幕一区二区三区| 国产在线观看91| 成人欧美一区二区三区在线湿哒哒 | 99综合在线| 国产伦精品一区三区精东| 亚洲成人综合视频| 农村少妇久久久久久久| 欧美激情一区二区三区高清视频| 日韩中文字幕无砖| 欧美 亚洲 视频| 国产91精品露脸国语对白| 1024手机在线视频| 精品国产免费一区二区三区香蕉| 色呦呦在线视频| 国产精品裸体一区二区三区| 激情av一区| 女同性恋一区二区三区| 精品久久久久久国产91| 女人天堂在线| 国产精品自拍视频| 中文字幕一区二区三区在线视频| 亚洲视频在线不卡| 一区二区三区在线观看视频| 不卡视频免费在线观看| 久久久欧美一区二区| 欧美精品中文| 日本三区在线观看| 国产精品久久久久久久久免费樱桃| 91精品国产乱码久久久| 欧美成人网在线| 国产亚洲精品美女久久| 波多野结衣家庭教师视频| 久久精品亚洲麻豆av一区二区| 国产裸体美女永久免费无遮挡| 日韩中文字幕在线播放| 久久久久久久久久久久电影| cao在线观看| 久久精品在这里| 91久久国语露脸精品国产高跟| 欧美黄色片在线观看| 亚洲国产精品嫩草影院久久av| 国产一级不卡毛片| 亚洲人成亚洲人成在线观看图片| 亚洲女同志亚洲女同女播放| 日本精品免费一区二区三区| 久久精品国产99久久| 自拍视频第一页| 一本在线高清不卡dvd| 免费日本一区二区三区视频| 都市激情久久久久久久久久久| 亚洲一区激情| 一本一本久久a久久| 精品国产91久久久久久久妲己| 香蕉久久免费电影| 国产精品88久久久久久妇女 | 欧美一区二区大片| 三级在线观看视频| 制服国产精品| 99国产精品久久久久久久久久久| 中文字幕av资源| 性欧美视频videos6一9| 日韩精品永久网址| av免费观看不卡| 欧美日韩在线观看一区二区 | 欧洲一区在线观看| 青春草免费在线视频| 欧美亚洲免费在线| 国产成人精品三级|