成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 中使用 JSON Schema 來校驗復雜 JSON 數據

開發 前端
在數據交換領域,JSON Schema 以其強大的標準化能力,為定義和規范 JSON 數據的結構與規則提供了有力支持。通過一系列精心設計的關鍵字,JSON Schema 能夠詳盡地描述數據的各項屬性。

JSON是我們編寫API時候用于數據傳遞的常用格式,那么你是否知道JSON Schema呢?

在數據交換領域,JSON Schema 以其強大的標準化能力,為定義和規范 JSON 數據的結構與規則提供了有力支持。通過一系列精心設計的關鍵字,JSON Schema 能夠詳盡地描述數據的各項屬性。然而,僅憑 JSON Schema 本身,尚不足以驗證 JSON 實例是否嚴格遵循預設的模式。此時,JSON Schema 驗證器的角色便顯得尤為關鍵。這些驗證器如同嚴格的檢查官,確保每一個 JSON 文檔都能忠實地反映出模式的定義。JSON Schema 驗證器,作為實現 JSON Schema 規范的技術工具,其靈活的集成能力使得無論項目規模大小,都能輕松地將 JSON Schema 融入開發流程,從而提升數據處理的效率與準確性。

圖片圖片

下面我們來看看如何在Spring Boot應用中使用JSON Schema校驗JSON數據

動手試試

  1. 創建一個基本的Spring Boot應用,如果還不會可以點擊查看Spring Boot快速入門[1]
  2. 在pom.xml中添加json-schema-validator依賴
<dependency>
  <groupId>com.networknt</groupId>
  <artifactId>json-schema-validator</artifactId>
  <version>1.4.0</version>
</dependency>
  1. 創建JSON Schema

在src/main/resources目錄下創建一個validation.json文件,然后在里面制定一套詳盡的驗證規則,比如下面這樣:

{
 "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Order Event",
    "description": "Order event schema for example",
    "required": ["order_id", "total_price", "products" ],
    "properties": {
       "order_id": {
          "type": "string"
        },
        "event": {
          "enum": ["PLACED", "DELIVERED", "RETURNED"],
          "type": "string"
        },
        "total_price": { 
         "type": "number",
             "minimum": 0
     },
        "products": {
      "type": "array",
      "items": {
        "additionalProperties": true,
        "required": ["product_id", "price"],
        "minItems": 1,
        "properties": {
          "product_id": {
            "type": "string"
          },
          "price": {
            "type": "number",
            "minimum": 0
          },
          "quantity": {
            "type": "integer"
          }
        }
      }
    }
   }
}
  1. 創建 JsonSchema 的 Bean

當然,你也可以直接new來創建,但實戰中還是推薦用Spring管理這些實例,比如 下面這樣:

@Configuration
public class JsonSchemaConfiguration {

    private static final String SCHEMA_VALIDATION_FILE = "validation.json";
   
    @Bean
    public JsonSchema jsonSchema() {
        return JsonSchemaFactory
                .getInstance( SpecVersion.VersionFlag.V7 )
                .getSchema( getClass().getResourceAsStream( SCHEMA_VALIDATION_FILE ) );
    }
}
  1. 使用 JsonSchema
@Slf4j
@Service
public class JsonSchemaValidationService{
  
  @Autowired
  private JsonSchema jsonSchema;
  
  public String validateJson(JsonNode jsonNode){
    
    Set<ValidationMessage> errors = jsonSchema.validate(jsonNode);
    if(errors.isEmpty()){
      log.info("event is valid");
    }else{
      log.info("event is invalid");
     }
      return errors.toString();
  }
}
  1. 在 Web 層的應用

創建一個Controller,當接收到來自客戶端的JSON數據之后,就可以像下面這樣對json數據進行校驗:

import com.fasterxml.jackson.databind.JsonNode;
@RestController
public class JsonSchemaController {
    @Autowired
    private JsonSchemaValidationService service;

    @PostMapping("/test")
    public String validateEvent( @RequestBody JsonNode jsonNode ){
       return service.validateJson(jsonNode);
    }
}
  1. 測試一下

啟動 Sprint Boot 應用,然后使用你喜歡的http客戶端工具對/test接口發送測試請求:

比如,下面使用Curl來進行測試:

  • 符合規則的合法請求:
$ curl --location 'localhost:8080/test' \
--header 'Content-Type: application/json' \
--data '{
  "order_id":"order134",
   "event": "PLACED",
   "products": [
     {
       "product_id": "product_1",
        "price":20.5,
       "quantity":2
     }
   ],
   "total_price": 41
}'

校驗通過,返回:[],沒有錯誤信息

  • 不符合規則的非法請求(卻少order id):
$ curl --location 'localhost:8080/test' \
--header 'Content-Type: application/json' \
--data '{
   "event": "PLACED",
   "products": [
     {
       "product_id": "product_1",
        "price":20.5,
       "quantity":2
     }
   ],
   "total_price": 41
}'

校驗失敗,將返回錯誤信息:[$.order_id: is missing but it is required]

參考資料

[1]Spring Boot快速入門: https://www.didispace.com/spring-boot-2/1-2-quick-start.html

[2]Spring技術交流群: https://www.didispace.com/jiaqun.html

[3]Spring Boot教程可以點擊直達!: https://www.didispace.com/spring-boot-2/

[4]What is JSON Schema?: https://json-schema.org/overview/what-is-jsonschema

[5]JSON Schema validator: https://www.jsonschemavalidator.net/

責任編輯:武曉燕 來源: 程序猿DD
相關推薦

2025-02-07 09:11:04

JSON對象策略

2021-08-12 10:32:50

Spring Boot參數校驗分組校驗

2021-08-10 15:11:27

Spring Boot參數校驗

2011-05-25 13:22:05

PHPJSON

2025-03-21 09:58:59

Python數據類型安全

2010-01-05 16:33:35

使用JSON

2024-04-29 07:50:52

C#AES加密

2017-12-27 15:16:35

Spring BootFlyway數據庫

2022-11-22 11:47:25

JSON格式外置表單

2010-08-05 13:07:11

FlexJson

2011-07-19 09:08:38

jQuery

2025-01-13 12:46:31

SpringBootJacksonJSON

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2012-07-17 16:37:43

json

2023-07-17 18:42:47

gRPCDemo項目

2022-07-26 16:54:08

QuartzJava

2024-12-03 08:00:00

2024-01-09 08:24:49

XMLJSONJavaScript

2025-05-29 01:22:00

FeignJSONRPC

2022-08-11 11:35:43

Vuev-model?表單
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜国产一区 | 中国大陆高清aⅴ毛片 | 韩日一区二区三区 | 91久久精品 | 久久精品小视频 | 日韩欧美专区 | 91精品国产91久久久久久三级 | 欧美日韩在线播放 | www.yw193.com | 91在线电影 | 久久久久久久久久爱 | 四虎影院在线免费观看 | 免费在线观看黄网站 | 国产精品久久九九 | 精品免费国产一区二区三区四区 | 国产精品久久久久久久久久免费看 | 国产亚洲一区二区三区在线观看 | 国产高清精品网站 | 色综合国产 | 国产电影一区二区三区爱妃记 | 51ⅴ精品国产91久久久久久 | 天天干com| 欧美freesex黑人又粗又大 | 久久久久久国产精品 | 亚洲视频在线一区 | 九一精品 | 欧美日韩三级 | аⅴ资源新版在线天堂 | 久久国产精品无码网站 | 精品国产一区二区在线 | 亚洲午夜网 | 免费黄色成人 | 久久综合伊人 | 欧美精品一区在线观看 | 美女视频一区 | 日韩成人在线视频 | 欧美日韩在线观看一区 | 日韩中文字幕在线视频 | 久久99成人 | 婷婷91 | 亚洲视频国产 |