如何使用 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.0
的 org.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)!
我正在尝试根据 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.0
的 org.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)!