如何使用 java 中的 EVERIT 在 JSON SCHEMA VALIDATION 中获取错误消息?

How to get error message in JSON SCHEMA VALIDATION using EVERIT in java?

我正在尝试根据 json 输入验证 json 模式。 我正在使用

org.everit.json.schema-1.0.0.jar

我的json输入

{ "id": 200, "name": "Green Learner", "cost": 0 }

我的 JSON 架构 .

    {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Youtube Channel",
    "description": "Youtube Channel for software development training",
    "type": "object",
     
    "properties": {
     
       "id": {
          "description": "The unique identifier for a product",
          "type": "integer"
       },
         
       "name": {
          "description": "Name of the the channle",
          "type": "string"
       },
         
       "cost": {
          "type": "number",
          "minimum": 100,
          "maximum":10000
       }
    },
     
    "required": ["id", "name", "cost"]
 }

JAVA 验证码。

import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.everit.json.schema.Schema;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 *
 * @author amitkumar
 */
public class JsonValidate {
    public static void main(String[] args) throws FileNotFoundException {
        File schemaFile = new File("schema.json");

        JSONTokener schemaData = new JSONTokener(new FileInputStream(schemaFile));
        JSONObject jsonSchema = new JSONObject(schemaData);

        //json data
        File jsonData = new File("product_invalid.json");
        JSONTokener jsonDataFile = new JSONTokener(new FileInputStream(jsonData));
        JSONObject jsonObject = new JSONObject(jsonDataFile);

       
        Schema schemaValidator = SchemaLoader.load(jsonSchema);
        schemaValidator.validate(jsonObject);

        System.out.println(jsonObject.getInt("cost"));

    }
}

当我 运行 使用 org.everit.json.schema-1.0.0.jar 的代码时,我收到以下错误消息。

Exception in thread "main" org.everit.json.schema.ValidationException:v0.0 is not higher or equal to 100

这是我在使用

时收到的警告信息

json-schema-validator-1.0.42.jar comes with com.networknt it clearly mention me object name which got error.

$.Cost: 0.0 is not higher or equal to 100

我想对 org.everit.json.schema-1.0.0.jar 做同样的事情,我的 json 输入中的哪个对象出错了。它没有显示对象名称。

如果图书馆不支持您的要求,您可以自行记录缺失的信息。像

try {
    schemaValidator.validate(jsonObject);
} catch(ValidationException e) {
    LOG.error("Validation error in Object: '{}'", yourObjectName, e)
}

顺便说一句,有比 1.0.0org.everit.json.schema 更新的版本可用:https://search.maven.org/artifact/org.everit.json/org.everit.json.schema

编辑添加附加信息:
ValidationException 有类似 getPointerToViolation() 的方法,可以为您提供所需的信息。查看当前版本的JavaDoc:https://erosb.github.io/everit-json-schema/javadoc/1.12.2/org/everit/json/schema/ValidationException.html#getPointerToViolation()

请注意,版本 1.0.0 没有此方法 (JavaDoc of v1.0.0)!