我希望我的HTTP请求正文接受以下内容:
{
"grant_type": "refresh_token", // "refresh_token" or "password"
"client_id": "my-client", // NEVER CHANGE
"refresh_token": "XXX"
}
或
{
"grant_type": "password", // "refresh_token" or "password"
"client_id": "my-client", // NEVER CHANGE
"username": "XXX",
"password": "XXX",
}
您会看到格式基于grant_type
进行了更改。所以我定义了这个模式:
{
"definitions": {
"username_and_password": {
"type": "object",
"properties": {
"grant_type": { "type": "string", "enum": ["password"] },
"client_id": { "type": "string", "enum": ["my-client"] },
"username": { "type": "string" },
"password": { "type": "string" }
},
"required": ["grant_type", "client_id", "username", "password" ]
},
"refresh_token": {
"type": "object",
"properties": {
"grant_type": { "type": "string", "enum": ["refresh_token"] },
"client_id": { "type": "string", "enum": ["my-client"] },
"refresh_token": { "type": "string" }
},
"required": [ "grant_type", "client_id", "refresh_token" ]
}
},
"oneOf": [
{ "$ref": "#/definitions/username_and_password" },
{ "$ref": "#/definitions/refresh_token" }
],
"additionalProperties": false
}
我将其用作API网关的模型,但它拒绝了我发送的所有内容。错误在哪里?
答案 0 :(得分:1)
struct ContentView : View {
var body: some View {
VStack(alignment: .center, spacing: 24) {
SomeViewRepresentable()
.background(Color.gray)
HStack {
Button(action: {
print("SwiftUI: Button tapped")
// Call func in SomeView()
}) {
Text("Tap Here")
}
}
}
}
}
为假是您的问题。
它不能“透视” additionalProperties
或oneOf
引用。
如果“ additionalProperties”具有布尔值false ...
在这种情况下,实例的验证取决于属性 一组“属性”和“ patternProperties”。
https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.4.4.4
关于它的工作原理还有更多说明,我们在第5草案之后对其进行了澄清,但从本质上讲...
$ref
适用于additionalProperties
中与properties
相同的模式对象级别中未定义的所有属性。
由于您的架构仅包含additionalProperties
且未定义additionalProperties
,因此所有属性都会导致验证失败。
您可以通过定义属性来解决此问题,其中每个属性的值为空模式。从草案5开始,您可以使用properties
作为值,因为true
和true
是有效的“方案”。