真香警告!擴充套件 swagger支援文件自動列舉所有列舉值
阿新 • • 發佈:2020-05-18
承接上篇文章 [《一站式解決使用列舉的各種痛點》](https://mp.weixin.qq.com/s/IxWbLB8J6R_xHmAVNTnvIg) 文章最後提到:**在使用 swagger 來編寫介面文件時,需要告訴前端列舉型別有哪些取值,每次增加取值之後,不僅要改程式碼,還要找到對應的取值在哪裡使用了,然後修改 swagger 文件。反正小黑我覺得這樣做很不爽,那有沒有什麼辦法可以讓 swagger 框架來幫我們自動列舉出所有的列舉數值呢?**
這期小黑同學就來講講解決方案。
先來看一下效果,有一個感性的認識
![](https://img2020.cnblogs.com/blog/1822265/202005/1822265-20200518083510593-1345680508.png)
請注意哦,這裡是課程型別不是我們手動列舉出來的,是swagger框架幫我們自動列舉的。對應的程式碼如下:
![](https://img2020.cnblogs.com/blog/1822265/202005/1822265-20200518083521402-1752888625.png)
那麼,這是怎麼做到的呢?
簡單描述一下實現:
1、自定義 SwaggerDisplayEnum 註解,註解中有兩個屬性,這兩個屬性是用來幹什麼的呢?小黑我先不說,大家往下閱讀,相信就能明白啦~
```java
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SwaggerDisplayEnum {
String index() default "index";
String name() default "name";
}
```
2、在我們的自定義列舉類中標記 `@SwaggerDisplayEnum` 註解
```java
@Getter
@AllArgsConstructor
@SwaggerDisplayEnum(index = "type", name = "desc")
public enum CourseType {
/**
* 圖文
*/
PICTURE(102, "圖文"),
/**
* 音訊
*/
AUDIO(103, "音訊"),
/**
* 視訊
*/
VIDEO(104, "視訊"),
/**
* 外鏈
*/
URL(105, "外鏈"),
;
@JsonValue
private final int type;
private final String desc;
private static f