【问题标题】:Using swagger to document a string from enum values使用 swagger 从枚举值中记录字符串
【发布时间】:2018-06-22 13:43:23
【问题描述】:

尝试获取 allowableValues 标记的枚举值时出现以下错误。

注解属性 ApiModelProperty.allowableValues 的值 必须是常量表达式

我想做什么:

@ApiModelProperty(allowableValues = new Enums().enumToString(SomeEnum.class))
private String someString;

这里是 Enums().enumToString 的逻辑

公共类枚举{

public final <E extends Enum<E>> String enumToString(Class<E> inputEnum) {
    //inputEnum;
    for (Enum enumValues : EnumSet.allOf(inputEnum)) {
          //will create a string of the enum values
        }

    return "will be a formatted string of the enum values";
}

}

有可能做我想要完成的事情吗?我知道可以只在我的 API 中公开枚举,然后 swagger 会自动识别允许的值,但是有问题的字段需要作为字符串公开,即使我们的内部逻辑将它作为枚举。

提前感谢您的帮助!

【问题讨论】:

标签: java spring enums swagger


【解决方案1】:
@ApiModelProperty(value = "embed", dataType = "[Lmodel.request.Embed;")
private final List<String> embed;

嵌入路径是枚举列表。这在 swagger 文档中向您展示了类似的内容:

type: "object"
properties:
  embed:
    type: "array"
    description: "embed"
    items:
      type: "string"
      enum:
        -SOME
        -SOME
        -SOME
        -SOME

【讨论】:

  • @R Soans,请解释代码并回答问题。您应该说明为什么会出现此错误以及如何修复它。感谢您的帮助
  • @MehdiYeganeh,galovics 的答案很准确。我的回答只是说明了 Brian 如何避免在“allowableValues”属性中明确提及枚举的所有值。
【解决方案2】:

您的问题根本与 Swagger 无关,而是与基本 Java 有关。

在 Java 注释中,你可以有常量表达式,这意味着你不能在那里进行方法调用,任何其他事情,只能使用常量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2018-07-12
    • 1970-01-01
    • 2022-07-15
    相关资源
    最近更新 更多