大家好,欢迎来到IT知识分享网。
Gitee仓库
https://gitee.com/Lin_DH/system
介绍
Json
Json(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的应该子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换。JSON是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的Web应用程序的数据交换。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。其文件通常使用扩展名.json。
JsonSchema
依赖
pom.xml
<dependency> <groupId>com.networknt</groupId> <artifactId>json-schema-validator</artifactId> <version>1.4.0</version> </dependency>
代码实现
validation.json
Json校验格式文件,按需求改动,放在Resource目录下。
{
"$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" } } } } } }
JsonSchemaConfiguration.java
package com.lm.system.config; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; / * @author DUHAOLIN * @date 2024/10/14 */ @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)); } }
JsonSchemaValidationServiceImpl.java
package com.lm.system.service.impl; import com.fasterxml.jackson.databind.JsonNode; import com.networknt.schema.JsonSchema; import com.networknt.schema.ValidationMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Set; / * @author DUHAOLIN * @date 2024/10/14 */ @Slf4j @Service public class JsonSchemaValidationServiceImpl {
@Resource 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(); } }
JsonSchemaController.java
package com.lm.system.controller; / * @author DUHAOLIN * @date 2024/10/14 */ import com.fasterxml.jackson.databind.JsonNode; import com.lm.system.service.impl.JsonSchemaValidationServiceImpl; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController @Api(tags = "json") public class JsonSchemaController {
@Resource private JsonSchemaValidationServiceImpl service; @PostMapping("/test") public String validateEvent(@RequestBody JsonNode jsonNode){
return service.validateJson(jsonNode); } }
测试数据
{
"order_id":"order134", "event": "PLACED", "products": [ {
"product_id": "product_1", "price":20.5, "quantity":2 } ], "total_price": 41 }
项目结构图
效果图
参考资料
Spring Boot 中使用 JSON Schema 来校验复杂JSON数据【https://www.didispace.com/spring-boot-2/3-3-spring-boot-json-schema.html】
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132265.html