如何从Java中的JsonSchema获取readOnly字段列表

时间:2015-04-20 20:06:29

标签: json validation field readonly jsonschema

我正在尝试使用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,它没有返回所有只读字段的方法。有没有人遇到过这种验证?如果是的话,你的方法是什么?

0 个答案:

没有答案