【问题标题】:Swagger schema not showing custom value of enumSwagger 架构未显示枚举的自定义值
【发布时间】:2020-08-10 17:29:10
【问题描述】:

我创建了一个枚举,它也存储了一个值

import com.fasterxml.jackson.annotation.JsonValue;

public enum AnimalType {
  DOG("dog"),
  CAT("cat"),

  private final String displayName;

  AnimalType(String displayName) {
    this.displayName = displayName;
  }

  @JsonValue
  public String getDisplayName() {
    return displayName;
  }

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

我以这种方式创建枚举,因为用户会给我输入 dogcat。枚举值正在正确序列化和反序列化。

但是swagger.json 显示DOGCAT 代替dogcat。我不希望用户看到内部枚举名称,并且由于用户将使用架构,因此我想在架构中显示 dogcat

        "type" : {
          "type" : "string",
          "enum" : [ "DOG", "CAT"]
        },

我尝试过使用@JsonProperty 注释(如@JsonProperty("dog")),但这并没有解决问题。你能指导我如何解决这个问题吗?

版本: 招摇:2.0 杰克逊:2.7.9

【问题讨论】:

    标签: java enums jackson swagger


    【解决方案1】:

    测试你的代码
    @JsonCreator
    public static AnimalType fromString(String key) {
        return displayName == null
                ? null
                : AnimalType.valueOf(key.toUpperCase());
    }
    

    【讨论】:

    • 非常感谢@sercheo_87 的帮助。但是建议的解决方案并没有解决我的问题,架构仍然包含“DOG”而不是“dog”。另外,您是否故意在 JSON 属性中使用枚举名称(“DOG”而不是“dog”)?
    • 非常感谢@sercheo_87,您建议的所有解决方案都应该按照文档工作。但不知何故他们不工作,非常感谢。
    • 查看下一篇博客以获取示例How To Serialize and Deserialize Enums with Jackson
    • 感谢@sercheo_87,看来 swagger-core 中存在错误,这就是它无法正常工作的原因。
    【解决方案2】:

    我尝试了各种替代方法来使其正常工作,例如

    public enum AnimalType {
      @JsonProperty("dog") DOG("dog"),
      @JsonProperty("cat") CAT("cat"),
    

    或按照@sercheo_87 的建议使用@JsonCreator。但架构未显示所需的值。

    我发现这是swagger-core 中的一个错误。更新版本的招摇对我有帮助。他们还将更改向后移植到此版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 2021-05-28
      相关资源
      最近更新 更多