Spring Boot 中使用 JSON Schema 校验复杂JSON数据的过程
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数据
动手试试
- 创建一个基本的Spring Boot应用,如果还不会可以点击查看快速入门
- 在
pom.xml
中添加json-schema-validator
依赖
<dependency> <groupId>com.networknt</groupId> <artifactId>json-schema-validator</artifactId> <version>1.4.0</version> </dependency>
创建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" } } } } } }
创建 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 ) ); } }
使用 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(); } }
在 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); } }
测试一下
启动 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]
相关资料What is JSON Schema?JSON Schema validator
到此这篇关于Spring Boot 中使用 JSON Schema 来校验复杂JSON数据的文章就介绍到这了,更多相关Spring Boot 校验JSON数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java实现的连接oracle/mysql数据库功能简单示例【附oracle+mysql数据库驱动包】
这篇文章主要介绍了java实现的连接oracle/mysql数据库功能,结合实例形式分析了java基于jdbc连接Oracle与mysql的相关操作技巧,并附带完整实例代码与oracle+mysql数据库驱动包供读者下载参考,需要的朋友可以参考下2017-10-10Java8中Lambda表达式使用和Stream API详解
这篇文章主要给大家介绍了关于Java8中Lambda表达式使用和Stream API的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-05-05解决Springboot2.1.x配置Activiti7单独数据源问题
这篇文章主要介绍了Springboot2.1.x配置Activiti7单独数据源问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下2019-09-09详解SpringBoot中@PostMapping注解的用法
在SpringBoot中,我们经常需要编写RESTful Web服务,以便于客户端与服务器之间的通信,@PostMapping注解可以让我们更方便地编写POST请求处理方法,在本文中,我们将介绍@PostMapping注解的作用、原理,以及如何在SpringBoot应用程序中使用它2023-06-06
最新评论