gpt4 book ai didi

Java Swagger UI - 如何正确配置枚举?

转载 作者:行者123 更新时间:2023-11-30 07:13:26 27 4
gpt4 key购买 nike

我正在使用 Swagger-UI 和 Java spring/hibernate。Swagger UI 版本为 2。

我在使用枚举方面遇到了困难。

我有一个 POJO 模型,其中声明了以下枚举属性。

@Enumerated(EnumType.STRING)
@Column(name = "gender")
@Access(AccessType.FIELD)
private Gender gender;

性别是枚举,如下:

public enum Gender {

M("Male"), F("Female");

private String displayValue;

private Gender(String displayValue) {
this.displayValue = displayValue;
}

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

public String getDisplayValue() {
return displayValue;
}

public String getName() {
return name();
}
}

但是我的 swagger 仅在 UI 中显示显示值(malefemale)以及下拉列表的显示值。我希望 Swagger UI 显示类似于下面的 HTML 等效内容:

<select name="gender">
<option value="M">Male</option>
<option value="F">Female</option>
</select>

如何实现这一目标? 阅读 Swagger UI 文档,对我来说非常困惑,无法理解它。请帮忙。

最佳答案

您需要通过实现接口(interface) AllowableMapValues 来创建自定义类 ( springfox.documentation.service.AllowableValues )这将返回 Map 类型而不是 List 类型。 (参见类springfox.documentation.service.AllowableListValues以供引用)。

之后你需要使用 springfox.documentation.schema.Enums 中的静态方法类通过隐藏静态方法( AllowableValues allowableValues(Class<?> type) )来返回新创建的 AllowableMapValues类似的类

public static AllowableValues allowableValues(Class<?> type) {
if (type.isEnum()) {
Map<String, String> enumValues = getEnumMapValues(type);
return new AllowableMapValues(enumValues, "MAP");
}
return null;
}

其中 <"K","V"> 配对类似于 <"M", "Male">

你应该创建静态方法getEnumMapValues其工作方式应与 getEnumValues 相同Enums中的方法类。

现在 swagger 将生成所需的类型。

记得输入@JsonValue你的方法上的注释Gender您喜欢在 UI 上显示的枚举。Swagger 默认情况下会选取用 @JsonValue 注释的值。 。如果没有找到,则直接将输入作为字符串。

我还没有尝试过这一切,但是,我能够通过注释以下方法在 swagger 下拉列表中获取枚举名称而不是枚举值。

@JsonValue  
public String enumName() {
return name();
}

这将返回以下内容中号

如果可以解决问题,您可以尝试上述方法

关于Java Swagger UI - 如何正确配置枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com