【问题标题】:How to use enum properties in OpenApi 3.0.1如何在 OpenApi 3.0.1 中使用枚举属性
【发布时间】:2021-10-11 12:05:00
【问题描述】:

我有一个这样的枚举:

@Getter
public enum ErrorCode implements BaseError {
    // @formatter:off
    FOO(100001, "Foo message.",
    BAR(100002, "Bar message."), 
.
.
.

    FOOBAR(300003, "FOOBAR message.");

    public final int errorId;
    public final String errorMsg;

    ErrorCode(int errorId, String errorMsg) {
        this.errorId = errorId;
        this.errorMsg = errorMsg;
    }
}

我知道,我可以使用@Schema(implementation = ErrorCode.class) 在 SqggerUI 中显示枚举,但它会显示名称。有没有办法显示错误代码(或枚举的任何其他已定义属性)?

在这种情况下,我想显示 errorCodes 列表,而不是显示枚举列表 names 的默认值。

【问题讨论】:

  • 我不确定库是使用name() 还是toString() 来生成Open API 规范。您是否尝试过覆盖 toString() 方法?
  • 谢谢你,本田。这是解决问题的一种可能方法。 :-)
  • 你测试了吗?如果我将其发布为答案,您会接受吗?我真的很好奇图书馆是否使用name()toString()。顺便说一句,我的名字是 Honza 而不是本田 - en.wikipedia.org/wiki/Honza :)
  • 抱歉错字,Honza(这是自动更正)。好吧,它可以工作,但更好的方法是告诉注释使用另一个枚举的属性。 Enum.toString() 默认在内部使用 name() 并且 OpenApi Schema 注解似乎也使用了枚举的 toString() 方法。 ...但是,这可能会对应用程序代码的其他部分产生影响。

标签: java openapi enumeration


【解决方案1】:

正如我所怀疑的,OpenApi 使用枚举的toString(),默认情况下实现为调用name()。如果您覆盖枚举的toString()。你会达到你的目标。

我看不出您不应该为 Java 枚举重新定义 toString() 的任何理由,我不知道这应该违反任何合同。

【讨论】:

  • 可能是我对 toString() 方法有更一般/重要的用法。因此,最好覆盖与主要用途相关的 toString() 方法。如果@Schema 注释有一个适当的附加属性,那就太好了。
  • 我很好奇:您还需要toString() 做什么?
猜你喜欢
  • 2015-02-20
  • 2023-04-04
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2022-01-09
  • 2023-03-30
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多