我在Java spring / hibernate中使用Swagger-UI。 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();
}
}
但我的招摇在UI中仅显示显示值(male
或female
)以及下拉列表的显示值。我希望Swagger UI显示类似下面的类似HTML的东西:
<select name="gender">
<option value="M">Male</option>
<option value="F">Female</option>
</select>
如何实现这一目标? 阅读Swagger UI文档,它让我感到困惑,无法理解它。请帮忙。
答案 0 :(得分:1)
您需要通过实现接口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
方法相同。
现在将生成所需的类型。
请记住将@JsonValue
注释放在要显示在UI上的Gender
枚举中。
Swagger默认情况下会拾取用@JsonValue
注释的值。如果找不到,它将直接将输入作为字符串。
我还没有尝试过所有方法,但是通过注释以下方法,我能够在挥杆下拉菜单中获得Enum名称而不是Enum值。
@JsonValue
public String enumName() {
return name();
}
这将返回以下内容 M
如果解决了问题,您可以尝试上述方法