有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在spring boot中使用openapi为枚举参数使用@Schema(allowableValues=)

我的API在请求正文中有一个枚举字段。当我生成swagger UI时,它会以允许的值作为枚举名显示枚举。我需要将它设置为枚举值,而不是枚举名称。为此,我使用了@Schema(allowableValues=)。这将在swagger UI中生成一个包含值和名称的列表。我是否可以仅在swagger中将其设置为值

我的枚举示例:

 public enum Days{
  MON("Monday"),
  SUN("Sunday")
}

当前的招摇过市字段如下所示:

day string Enum: [ MON, SUN ]

我希望它有:

day string Enum: [ Monday, Sunday]

当我将@Schema(allowableValues={“周一”、“周日”)添加到enum字段时,Swagger变成:

day string Enum: [ MON, SUN, Monday, Sunday]

任何解决方案都值得赞赏

enter image description here


共 (3) 个答案

  1. # 1 楼答案

    如果您使用的是Jackson,那么swagger添加了对使用v2中包含的注释@JsonProperty/@JsonValue中定义的值的支持。1.3 https://github.com/swagger-api/swagger-core/releases/tag/v2.1.3

    这样你就可以写了

     public enum Days{
         @JsonProperty("Monday")
         MON,
         @JsonProperty("Sunday")
         SUN
    }
    
  2. # 2 楼答案

    使用

    @Schema(type = "string", allowableValues = { "Monday", "Sunday" })
    
  3. # 3 楼答案

    可以通过覆盖enum的toString来实现。不需要使用@Schema

     @Override
      public String toString() {
        return value;
      }