我正在尝试使用json-schema-validator库验证针对模式的JSON输入:https://github.com/fge/json-schema-validator。验证工作正常。但是,我的要求之一是确保输入不包含任何只读字段。我在json模式中将字段标记为只读,但是没有好的方法可以知道java代码中哪些字段是只读的。
这是一个示例架构:
{
"type": "object",
"$schema": "http://json-schema.org/draft-03/schema",
"id": "http://jsonschema.net",
"required":false,
"properties": {
"partId": {
"type": "string",
"final":true,
"minLength": 1,
"maxLength": 36
},
"name": {
"type": "string",
"required": true
},
"forSaleDate": {
"type":"string",
"format":"date",
"final":true,
"readOnly":true
}
}
}
这是我用于验证的代码:
JsonNode jsonSchemaNode = null;
try {
jsonSchemaNode = JsonLoader.fromString(schemaString);
} catch (JsonProcessingException e) {
log.error("Invalid JSON schema");
throw e;
}
JsonSchema jsonSchema = factory.fromSchema(jsonSchemaNode);
JsonNode json = null;
try {
json = mapper.readTree(example);
} catch (JsonProcessingException e) {
log.error("Invalid JSON string");
}
if (json != null) {
ValidationReport validationReport = jsonSchema.validate(json);
}
我的架构中的最后一个字段" forSaleDate"是一个只读字段。在我的验证代码中,JSON输入将被解析为JsonNode,我可以调用" has(fieldName)" JsonNode上的方法,看它是否包含特定字段。我们的想法是为所有只读字段执行此操作。然而,棘手的部分是找出哪些字段是只读的。上面代码中的模式表示为JsonSchema,它没有返回所有只读字段的方法。有没有人遇到过这种验证?如果是的话,你的方法是什么?