我有一个带有多个参数的枚举。
public enum MyEnum {
VALUE_1("value1_string_1", "value1_string_2");
private final String argument1;
private final String argument2;
MyEnum (String argument1, String argument2) {
this.argument1 = argument1;
this.argument2 = argument2;
}
public String getArgument1() {
return argument1;
}
public String getArgument2() {
return argument2;
}
}
字符串
作为REST-API一部分的DTO将这两个参数的值用于其字段。字段1用参数1设置,字段2用参数2设置。
public class MyDTO {
private String field1;
private String field2;
...
}
...
MyDTO myDto = new MyDTO();
myDto.setField1(VALUE_1.getArgument1())
myDto.setField2(VALUE_1.getArgument2())
型
我怎样才能将包含参数的枚举添加到openapi.json中?
我知道我可以使用@Schema(..., implementation = MyEnum.class) private String field1;
,但这将只包括没有参数的枚举值,如:
"field1" : {
"type" : "string",
"enum" : [ "VALUE_1" ]
}
型
此外,参数1和参数2之间的连接不应丢失。API的用户应该能够看到“value1_string_1”和“value1_string_2”属于同一个属性。
枚举值(包括参数)应该自动添加到openapi.json中,以确保它始终是最新的。这意味着添加类似于这个答案Swagger/openapi add @Schema(description) to each enum value的描述并不能解决问题。
我认为@Schema(... ref = "#/components/schemas/MyEnum/properties/argument1" ) private String field1;
可能是解决方案的一部分。但是,如果带参数的枚举不在openapi.json中,则引用是无用的。
应用程序使用以下swagger依赖项:
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.2.7</version>
</dependency>
型
1条答案
按热度按时间tpgth1q71#
表面上的问题是,在枚举代码中,你使argument1和argument2final。这意味着对于枚举的该示例,它们只能被赋值一次。然后,为该枚举常量分配初始值“value1_string_1”和“value1_string_2”(发布的代码有点不完整,但我假设您的实际枚举代码处于工作状态,复制粘贴在发布时没有正确捕获它)。因此,如果你想给argument1和argument2分配不同的值,那么你需要从它们的声明中删除final。
第二部分是枚举可能不是您在这里要使用的工具。枚举示例有一个特殊的构造过程,它保证每个decalred枚举常量在程序的生存期内只示例化一次。我有一种感觉,在使用json框架时,你真的应该使用一个普通的类而不是枚举。在创建您可能需要的类的示例时,有更多的自由度。