1

我的 .raml 文件中有以下 json 模式定义

- request: |
   {
 "type": "object",
 "$schema": "http://json-schema.org/draft-03/schema",
 "id": "http://jsonschema.net",
 "required": true,
 "properties": {
     "personProperty": {
         "type": "array",
         "items": {                 
                 "$ref": "property"                 
         }
     }
 }
   }
- property: |
   {   "$schema": "http://json-schema.org/draft-03/schema",
       "type": "object",
       "description": "A single person property",
       "properties": {
           "fieldId":  { "type": "integer", "required": true},
           "systemId": { "type": "integer", "required": false},
           "value":    { "type": "string" , "required": true },
           "created":  { "type": "string" , "required": false }
        }
   }

当数组中的必填字段之一丢失时,我需要 mule ESB 拒绝输入。

例如,这应该被 400-BAD REQUEST 拒绝:

 {
"personProperty": [
    {
        "fieldId": "1",
        "systemId": 1,
        "created": "2015-02-23 21:19:00.907"
    }
]
}

如果架构不在数组中,则验证工作正常。但是当在数组内部时,它不会验证任何具有所需属性的单个项目。

我需要特殊配置吗?

谢谢。

4

2 回答 2

0

您还没有回答我的问题,所以我只能假设您错误地包含了内部对象定义。看到你自己的答案和挣扎的参考,我也想提出一个答案。

这是您的架构的独立且无参考的表示:

{
    "type": "object",
    "$schema": "http://json-schema.org/draft-03/schema",
    "properties": {
        "personProperty": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "fieldId": {
                        "type": "integer",
                        "required": true
                    },
                    "systemId": {
                        "type": "integer",
                        "required": false
                    },
                    "value": {
                        "type": "string",
                        "required": true
                    },
                    "created": {
                        "type": "string",
                        "required": false
                    }
                }
            }
        }
    }
}
于 2015-03-21T22:26:53.327 回答
0

经过一段时间的挣扎后,我能够使用它使其工作:

 - request: |
{
"type": "object",
"$schema": "http://json-schema.org/draft-03/schema",
"id": "http://jsonschema.net",
"definitions": {
    "person-property": {
        "type": "object",
        "properties": {
            "fieldId": {
                "type": "integer",
                "required": true
            },
            "systemId": {
                "type": "integer",
                "required": false
            },
            "value": {
                "type": "string",
                "required": true
            },
            "created": {
                "type": "string",
                "required": false
            }
        }
    }
},
"properties": {
    "personProperty": {
        "type": "array",
        "items": {
            "$ref": "#/definitions/person-property"
        }
    }
}
}

我使用了内部定义,然后使用“$ref”调用它:“#/definitions/person-property”

于 2015-03-21T19:32:44.183 回答