我使用的是swagger-spring-mvc 0.9.5,在我的响应数据中有这样的字段:
@ApiModelProperty("Some description")
private List<Account> accounts;
问题的简短版本:我如何通过swagger-codegen从这个带注解的Java转换到Objective C?
生成的swagger JSON是:
accounts: {
description: "Some description",
items: {
type: "Account"
},
required: false,
type: "List"
}
我的同事正在把这个输入swagger-codegen来生成Objective C类,它生成的代码不能编译。
@property (nonatomic, strong) NSArray<Optional, NSArray> *accounts;
因为NSArray
(在< >
内部)不是一个协议。
swagger模板文件(mustache)为每个模型创建一个协议,当在数组中指定该协议时,JSONModel将从list / array中的数据中获取该协议以生成正确的模型。
@property (nonatomic, strong) NSArray<Optional, MAAccount> *accounts;
这将创建一个MAAccount
的NSArray
(Account
是对象类型,MA
是swagger已经具有的前缀)。
如果我们手动编辑swagger JSON,将List
更改为array
(如在各种类似情况下建议的那样),输出是正确的,但我们希望避免这个手动步骤。
所以我试着让swagger-spring-mvc使用"array"
:
@ApiModelProperty(value = "Some description", dataType = "array")
private List<Account> accounts;
但是后来发现dataType
在swagger-spring-mvc 0.9.5中被忽略了,而且看起来,在springfox 2.0中它被忽略了,除非它是一个完全限定的Java类名。
有没有办法做到这一点,要么让swagger-spring-mvc/springfox使用"array"
,要么通过其他方式?
2条答案
按热度按时间sc4hvdpw1#
在大多数情况下,swagger注解只是帮助springfox引擎推断关于类型的附加信息,如description/hidden/readonly等,这些信息在类型系统中是不可用的。它也可以作为一个拐杖来表示那些不容易推断的类型。数据类型可以被覆盖,但只是为了类型安全,正如在注解中指出的那样。
具体来说,我了解到dataType将被忽略,除非它是一个完全限定的类名。
就像@CupawnTae建议的那样,version 2.x of springfox支持一个选项,可以用代码生成友好的、与语言无关的泛型类型表示来呈现泛型类型。
在创建/配置您的摘要时,您需要使用
forCodeGeneration
选项指定所呈现的swagger服务描述需要是代码生成友好的这将导致springfox呈现
List<String>
之类的泛型类型。forCodeGeneration
设置为true时,作为ListOfString
forCodeGeneration
设置为false时,作为List«String»
2w2cym1i2#
你可以尝试下面的符号。别忘了使用你的类的包信息