如何将JSON数组设置为自定义类型?
How to Set JSON Array to Defined Type?
如何设置数组中的对象类型以引用 json 架构文件的定义部分中的另一个已定义对象?我试过这样做:
"definitions": {
"ObjectA": {
"title": "ObjectA",
"type": "object",
"properties": {
"description": {
"type": "string"
},
"status": {
"type": "string"
},
},
"required": [
"description",
"status"
]
},
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"type": {
"$ref": "#/definitions/ObjectA"
}
}
}
},
"required": [
"objectalist"
]
}
}
和json小编好像觉得还行。此代码段是 Swagger API 定义的一部分,当我通过代码生成工具 运行 时,出现此错误:
[main] ERROR io.swagger.codegen.DefaultCodegen - No Type defined for Property null
Exception in thread "main" java.lang.RuntimeException: Could not process model 'ObjectB'.Please make sure that your schema is correct!
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:297)
at io.swagger.codegen.cmd.Generate.run(Generate.java:223)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:36)
Caused by: java.lang.NullPointerException
at io.swagger.codegen.languages.AbstractJavaCodegen.toModelName(AbstractJavaCodegen.java:400)
at io.swagger.codegen.languages.AbstractJavaCodegen.getSwaggerType(AbstractJavaCodegen.java:577)
at io.swagger.codegen.DefaultCodegen.getTypeDeclaration(DefaultCodegen.java:1119)
at io.swagger.codegen.languages.AbstractJavaCodegen.getTypeDeclaration(AbstractJavaCodegen.java:427)
at io.swagger.codegen.languages.AbstractJavaCodegen.toDefaultValue(AbstractJavaCodegen.java:440)
at io.swagger.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:1359)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2738)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2709)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2695)
at io.swagger.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:1284)
at io.swagger.codegen.languages.AbstractJavaCodegen.fromModel(AbstractJavaCodegen.java:601)
at io.swagger.codegen.DefaultGenerator.processModels(DefaultGenerator.java:875)
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:290)
... 2 more
如果我将 ObjectB 更改为:
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"objectalist"
]
}
代码生成有效。有没有办法将数组中的对象类型设置为定义的类型?
在另一个 post 中找到了关于定义自定义 JSON 类型的答案。答案是删除封闭的 "type":
。所以,它看起来像这样:
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"$ref": "#/definitions/ObjectA"
}
}
},
"required": [
"objectalist"
]
}
如何设置数组中的对象类型以引用 json 架构文件的定义部分中的另一个已定义对象?我试过这样做:
"definitions": {
"ObjectA": {
"title": "ObjectA",
"type": "object",
"properties": {
"description": {
"type": "string"
},
"status": {
"type": "string"
},
},
"required": [
"description",
"status"
]
},
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"type": {
"$ref": "#/definitions/ObjectA"
}
}
}
},
"required": [
"objectalist"
]
}
}
和json小编好像觉得还行。此代码段是 Swagger API 定义的一部分,当我通过代码生成工具 运行 时,出现此错误:
[main] ERROR io.swagger.codegen.DefaultCodegen - No Type defined for Property null
Exception in thread "main" java.lang.RuntimeException: Could not process model 'ObjectB'.Please make sure that your schema is correct!
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:297)
at io.swagger.codegen.cmd.Generate.run(Generate.java:223)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:36)
Caused by: java.lang.NullPointerException
at io.swagger.codegen.languages.AbstractJavaCodegen.toModelName(AbstractJavaCodegen.java:400)
at io.swagger.codegen.languages.AbstractJavaCodegen.getSwaggerType(AbstractJavaCodegen.java:577)
at io.swagger.codegen.DefaultCodegen.getTypeDeclaration(DefaultCodegen.java:1119)
at io.swagger.codegen.languages.AbstractJavaCodegen.getTypeDeclaration(AbstractJavaCodegen.java:427)
at io.swagger.codegen.languages.AbstractJavaCodegen.toDefaultValue(AbstractJavaCodegen.java:440)
at io.swagger.codegen.DefaultCodegen.fromProperty(DefaultCodegen.java:1359)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2738)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2709)
at io.swagger.codegen.DefaultCodegen.addVars(DefaultCodegen.java:2695)
at io.swagger.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:1284)
at io.swagger.codegen.languages.AbstractJavaCodegen.fromModel(AbstractJavaCodegen.java:601)
at io.swagger.codegen.DefaultGenerator.processModels(DefaultGenerator.java:875)
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:290)
... 2 more
如果我将 ObjectB 更改为:
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"objectalist"
]
}
代码生成有效。有没有办法将数组中的对象类型设置为定义的类型?
在另一个 post 中找到了关于定义自定义 JSON 类型的答案。答案是删除封闭的 "type":
。所以,它看起来像这样:
"ObjectB": {
"title": "ObjectB",
"type": "object",
"properties": {
"objectalist": {
"type": "array",
"items": {
"$ref": "#/definitions/ObjectA"
}
}
},
"required": [
"objectalist"
]
}