有 Java 编程相关的问题?

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

java 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;
  }
}

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

但是swagger.json显示DOGCAT代替了dogcat。我不想让用户看到内部枚举名,因为用户将使用模式,所以我想在模式中显示dogcat

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

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

版本: 大摇大摆:2.0 杰克逊:2.7.9


共 (2) 个答案

  1. # 1 楼答案

    我尝试了各种各样的方法来让它工作,比如

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

    或者使用@sercheo_87建议的@JsonCreator。但是架构没有显示所需的值

    我发现这是swagger-core中的一个bug。更新版本的《大摇大摆》对我很有帮助。此外,他们正在将更改反向移植到此版本

  2. # 2 楼答案

    使用

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