我希望我的应用程序接收Json模式,然后验证某些JSON对象是否符合模式。我的问题是,如果我提供错误的Json模式,我不会得到异常,只是日志中的一些警告。 所以我要么被抛出异常,要么以某种方式考虑警告。但是,警告日志对我来说似乎相当沉默。
我正在使用java,而库是json-schema
的标准库Log.i("TAG", "...")
答案 0 :(得分:2)
JSON Schema的元模式("模式的模式")允许其他属性,因此fge验证器也可以,并且没有理由为什么实现会改变这个限制。
您可以做的一件事是下载元架构,将其更改为"additionalProperties": false
,然后使用验证器加载此更改的元架构,并使用验证您自己的架构。
draft4元模式位于:http://json-schema.org/draft-04/schema
答案 1 :(得分:0)
我能够更改FGE验证器在提供未知属性时将验证视为不成功所需的错误阈值。以下代码完成了工作
void validateSchema(JsonNode schemaNode) throws JsonProcessingException {
SyntaxValidator validator = JsonSchemaFactory.byDefault().getSyntaxValidator();
ProcessingReport report = new ListProcessingReport(null, LogLevel.INFO);
ValueHolder<SchemaTree> holder = ValueHolder.<SchemaTree>hold("schema",
new CanonicalSchemaTree(SchemaKey.anonymousKey(), schemaNode));
Processor<ValueHolder<SchemaTree>, ValueHolder<SchemaTree>> processor =
validator.getProcessor();
report = ProcessingResult.uncheckedResult(processor, report, holder).getReport();
if (!report.isSuccess()) {
IllegalArgumentException ex = new IllegalArgumentException();
for (ProcessingMessage processingMessage : report) {
ex.addSuppressed(processingMessage.asException());
}
throw ex;
}
}
答案 2 :(得分:0)
好方法@ erosb,@ Llvanov。作为替代方案,我可以通过将“ additionalProperties”属性直接注入到模式节点中来使解析器验证未知属性。
((ObjectNode) schemaNode).put(
"additionalProperties",
false);