Him*_*ora 5 java spring swagger swagger-codegen
我正在使用SwaggerCodegen(2.3.1)生成我的API的客户端代码。我将枚举用作YAML定义文件的一部分,之后Swagger生成了Java文件。
random:
enum:
- A
- B
- C+
- C-
type: string
Run Code Online (Sandbox Code Playgroud)
此yml转换为
public enum Random{
A("A"),
B("B"),
C_("C+"),
C_("C-"); // compile time error..
private String value;
....}
Run Code Online (Sandbox Code Playgroud)
有没有办法给我的枚举值命名,如下所示?
public enum Random{
A("A"),
B("B"),
CP("C+"),
CM("C-");
}
Run Code Online (Sandbox Code Playgroud)
特殊字符是对 swagger codegen 的限制,可能仍然不支持它们,因此要实现它,我必须在 yml 文件中添加一个新块
random:
enum:
- A
- B
- C+
- C-
x-enum-names:
- A
- B
- CP
- CM
type: string
Run Code Online (Sandbox Code Playgroud)
除此之外,我还必须创建一个继承 JavaClientCodegen 的类并重写以下方法,该方法将C+ 替换为 CP
class SwaggerCodegen : JavaClientCodegen() {
override fun updateCodegenPropertyEnum(codegenProperty: CodegenProperty?) {
super.updateCodegenPropertyEnum(codegenProperty)
if (codegenProperty!!.vendorExtensions.containsKey( "x-enum-names" )) {
val alterNames = codegenProperty.vendorExtensions["x-enum-names"] as List<String>
val enums = codegenProperty.allowableValues.get("enumVars") as List<MutableMap<String, String>>
if (alterNames.size != enums.size) {
return
}
alterNames.forEachIndexed { index, element ->
enums[index].put("name", element)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |