使用OPENApi 3.0。我已经定义了一个可重用的 Emum 模式,如下所示
components:
schemas:
Color:
type: integer
enum: [1,2,3]
x-enum-varnames:
- black
- white
- red
生成的 Enum 类只有 value 作为字段和 getValue()。 我面临的问题是我想发送枚举名称作为响应的一部分。有没有办法 openAPI 可以生成 getName().
为了解决您在使用 OpenAPI 3.0 和 Enum 类中自动生成方法时遇到的问题,让我们深入研究一些解决方案和解决方法:
大多数 OpenAPI 代码生成工具(例如 Swagger Codegen 或 OpenAPI Generator)允许您自定义用于生成源代码的模板。通过自定义这些模板,您可以向 Enum 类添加其他方法,例如
getName()
。这是一般方法:
getName()
方法的自定义模板。这通常涉及编辑这些工具使用的 Mustache 模板文件。如果自定义模板不可行,另一种方法是在生成类后手动添加或自动添加
getName()
方法。这可以通过以下方式完成:
对于 Java,某些工具(如
swagger-codegen
)支持注释,可以帮助更明确地管理枚举值。例如,使用 @JsonValue
注释(来自 Jackson 库)可以控制输出值。虽然这并不完全是您所要求的,但它对于控制序列化是相关且有用的:
public enum Color {
black(1),
white(2),
red(3);
private int value;
Color(int value) {
this.value = value;
}
@JsonValue
public int getValue() {
return value;
}
public String getName() {
return name().toLowerCase();
}
}
如果您使用 OpenAPI Generator,您可能能够传递其他参数或使用更好支持枚举生成的特定库选项。检查特定于您正在使用的生成器的文档,因为有些生成器具有并非立即显而易见的高级枚举选项。
解决方案很大程度上取决于您所使用的代码生成器的具体情况。每个生成器都有其细微差别和功能,特别是在它们如何处理枚举方面。自定义生成模板提供了最大的灵活性,但需要熟悉模板语言(如 Mustache)和生成器的自定义点。始终确保任何手动更改与您的整体项目管理策略保持一致,以避免后代覆盖自定义代码。