Нуждаете се от валидатор на JSON схема за потребителски вход. Планирам да използвам https://github.com/fge/json-schema-validator
Ето какво се опитвам да направя:
static JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
static {
try {
logger.info("Looking for schema");
JsonSchema schema = factory.getJsonSchema(JSONValidator.class
.getClassLoader()
.getResource("schema.json")
.toString());
} catch (ProcessingException e) {
logger.error("Failed to parse JSON Schema. Cannot validate JSON inputs ", e);
}
}
Вземете това изключение дори преди да прочетете файла на схемата. Тествах го, като премахнах целия код и запазих само този ред:
static JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
Какво може да не е наред?
java.lang.NoSuchFieldError: WRITE_BIGDECIMAL_AS_PLAIN
at com.github.fge.jackson.JacksonUtils.newMapper(JacksonUtils.java:155)
at com.github.fge.jackson.JacksonUtils.<clinit>(JacksonUtils.java:55)
at com.github.fge.jackson.JsonNodeReader.<init>(JsonNodeReader.java:82)
at com.github.fge.jackson.JsonLoader.<clinit>(JsonLoader.java:50)
at com.github.fge.jsonschema.SchemaVersion.<init>(SchemaVersion.java:63)
at com.github.fge.jsonschema.SchemaVersion.<clinit>(SchemaVersion.java:44)
at com.github.fge.jsonschema.core.load.configuration.LoadingConfigurationBuilder.<init>(LoadingConfigurationBuilder.java:117)
at com.github.fge.jsonschema.core.load.configuration.LoadingConfiguration.byDefault(LoadingConfiguration.java:151)
at com.github.fge.jsonschema.main.JsonSchemaFactoryBuilder.<init>(JsonSchemaFactoryBuilder.java:67)
at com.github.fge.jsonschema.main.JsonSchemaFactory.newBuilder(JsonSchemaFactory.java:123)
at com.github.fge.jsonschema.main.JsonSchemaFactory.byDefault(JsonSchemaFactory.java:113)
at com.intuit.mumble.validator.JSONValidator.<clinit>(JSONValidator.java:29)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Знам, че нещо, което този JSON Schema Validator очаква в Jackson, не е налично. Но бих искал да знам дали сте срещали този проблем с версията, която сте използвали и вече сте го разрешили.
json.schema.validator.version 2.2.5 jackson2.version 2.1.0