Html swagger codegen:d+;模式和类型:“类型”;数组";
我是个招摇过市的新手。我已经使用swagger servlet从RESTAPI Java类生成了swagger.json文件。json文件显示了swagger 2.0(我假设这是2.0模式版本)。源文件中没有什么特别之处,只有@Api和一些@ApiOperation注释 然后我尝试使用swagger codegen cli(版本2.1.4和2.1.6-SNAPSHOT,最新版本)从JSON文件生成HTML输出。我在这两方面都得到了以下结果:Html swagger codegen:d+;模式和类型:“类型”;数组";,html,swagger,Html,Swagger,我是个招摇过市的新手。我已经使用swagger servlet从RESTAPI Java类生成了swagger.json文件。json文件显示了swagger 2.0(我假设这是2.0模式版本)。源文件中没有什么特别之处,只有@Api和一些@ApiOperation注释 然后我尝试使用swagger codegen cli(版本2.1.4和2.1.6-SNAPSHOT,最新版本)从JSON文件生成HTML输出。我在这两方面都得到了以下结果: reading from dsm_swagger.js
reading from dsm_swagger.json
[main] ERROR io.swagger.codegen.DefaultCodegen - unexpected missing property for name suppressed
[main] WARN io.swagger.codegen.DefaultCodegen - skipping invalid property {
"type" : "array"
}
writing file /home/combs/dsm_swagger/./index.html
所以我得到了一个输出文件,但是标记为对象列表的任何类型都没有得到正确处理。这些似乎是有效的2.0构造
我还得到了关于无效转义字符的Jackson错误,因为它看到
"pattern": "\d+"
在文件中。我可以使用[0-9]来处理\d,但假设它应该按原样处理
有没有人见过这些特殊的问题,并且知道它们是否已经修复,或者在swagger codegen或源文件中有解决方法?swagger codegen是否正确处理v2.0规格?任何最新的信息或代码的指针将不胜感激
编辑:
正如在评论中提到的,通过在适当的位置使用“@JsonIgnore”和“@JsonProperty”并升级到swagger core的V1.5.6,我解决了无效属性和键入“array”消息的问题。以下是有关\d问题的示例:
"/v1/admins/{adminId}": {
"put": {
"tags": [
"admins"
],
"summary": "Update information about a particular admin, given its ID. The update information is passed in the POST body.",
"description": "Longer notes about what this does",
"operationId": "updateUser",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "adminId",
"in": "path",
"required": true,
"type": "integer",
"pattern": "\d+",
"format": "int64"
},
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/UserUpdateInfo"
}
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"$ref": "#/definitions/UserInfo"
}
}
}
}
},
这是swagger core的精确输出,但swagger codegen出现以下故障:
combs@dcombs-lap:~/dsm_swagger$ gen_file
reading from dsm_swagger.json
reading from dsm_swagger.json
com.fasterxml.jackson.core.JsonParseException: Unrecognized character escape 'd' (code 100)
at [Source: dsm_swagger.json; line: 411, column: 27]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1419)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:508)
at com.fasterxml.jackson.core.base.ParserMinimalBase._handleUnrecognizedCharacterEscape(ParserMinimalBase.java:485)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeEscaped(UTF8StreamJsonParser.java:2924)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2209)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2165)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:279)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:224)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeArray(JsonNodeDeserializer.java:262)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:221)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:218)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:218)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:218)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:62)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:14)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1861)
at io.swagger.parser.SwaggerCompatConverter.readResourceListing(SwaggerCompatConverter.java:139)
at io.swagger.parser.SwaggerCompatConverter.read(SwaggerCompatConverter.java:74)
at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:73)
at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:317)
at io.swagger.codegen.cmd.Generate.run(Generate.java:186)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Exception in thread "main" java.lang.RuntimeException: missing swagger input or config!
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:89)
at io.swagger.codegen.cmd.Generate.run(Generate.java:188)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
combs@dcombs-lap:~/dsm_swagger$
找到了答案。第一项关于“名称被抑制的缺失属性”的内容,我认为是指“我们抑制了缺失的“名称”属性”。实际上是“名为'supprested'的属性声明中缺少条目。原来它是一个类型:数组声明,但显然,在类型擦除之后,swagger codegen看到了列表。仍在寻找解决方案。另外,如果swagger是这样生成文件的,那么仍然没有找到\d被视为无效的原因。我认为将文件修改为使用\\d会起作用,但如果swagger生成正确的文件会更好。请共享您的swagger.json的输出?我通过适当使用“@JsonIgnore”和“@JsonProperty”并升级到使用swagger core的V1.5.6,修复了抑制错误和其他错误(我看到的所有在线参考资料都只提到V1.5.0)。我将附加swagger.json的相关部分(整个内容是10K+行)。由于转义是由Java编译器处理的,
\d
无效。它应该是字符串文本中的\\d
,最终编译回\d
。例如,在Java中,字符串换行=“\n”
给出一个包含1个字符的字符串-换行符。字符串反斜杠=“\\n”;
生成一个2个字符的字符串,\n
。