首页 > 解决方案 > Swagger 架构未显示枚举的自定义值

问题描述

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

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显示DOGandCAT代替dogand cat。我不希望用户看到内部枚举名称,并且由于用户将使用架构,我想在架构中显示dogor cat

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

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

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

标签: javaenumsjacksonswagger

解决方案


测试你的代码

@JsonCreator
public static AnimalType fromString(String key) {
    return displayName == null
            ? null
            : AnimalType.valueOf(key.toUpperCase());
}

推荐阅读