我从the documentation知道我可以这样注释我的POJO:
@ApiModelProperty(value = "pet status in the store", allowableValues = "available,pending,sold")
public String getStatus() {
return status;
}
产生类似的东西:
"properties": {
...,
"status": {
"type": "string",
"description": "pet status in the store",
"enum": [
"available",
"pending",
"sold"
]
}
}
图片现在实现方法:
@ApiModelProperty(value = "pets in the store")
public Set<String> getPets() {
return pets;
}
返回商店中可用的宠物列表。例如,有一天它可能是["cats", "dogs", "songbirds"]
,然后当鸣禽售罄时只有["cats", "dogs"]
。
我的API实际上有一个端点来获取宠物列表:
而不是使用allowableValues = "cats, dogs, songbirds"
,
我想指定一个Swagger注释
该字段必须包含给定端点返回的值。就是这样:
@ApiModelProperty(value = "pets in the store", allowableValues = "/pets")
public Set<String> getPets() {...}
这是为了让我的客户端/前端知道在发出请求时可以使用哪些值,
例如,在线购买宠物。如果我有"enum": ["cats", "dogs", ..]
答案 0 :(得分:2)
您可以执行以下操作:
processAllowedValues
类中扩展方法io.swagger.util.ParameterProcessor
以使用除逗号分隔值之外的Enum类。 (目前它仅支持逗号分隔值和范围)但是,使用此方法,您需要继续维护Swagger的分支。
答案 1 :(得分:0)
Java注释是一种语法元数据。它在编译期间被处理并且(如果在其上指定了@Retention(RetentionPolicy.RUNTIME)
)在运行期间可用于反射访问。因此,在运行时没有直接的解析或设置方法!
然而,Java中有一种方法可以实现您想要的 - 但它有点过于复杂(并且使用了一些未记录的功能!)。方法如下:
@Retention(RetentionPolicy.COMPILE)
的注释) - 这将充当@ApiModelProperty
javax.annotation.processing.AbstractProcessor
类扩展)@ApiModelProperty
的值从您的Enum
读取(这部分相当复杂,因为您需要遍历{{1}的AST获取允许的值)Project Lombok就是一个很好的例子。它操纵Java的抽象语法树以在Java中添加新功能。
在it's source code的Enum
下,请看一下:
lombok.javac.handlers
方法,了解如何在编译时添加注释。 (使用HandleConstructor.addConstructorProperties
)com.sun.tools.javac.tree.JCAnnotation
方法,了解如何阅读 literal 值。您还可以查看本教程:Creating Custom Transformations