1. 程式人生 > >真香警告!擴充套件 swagger支援文件自動列舉所有列舉值

真香警告!擴充套件 swagger支援文件自動列舉所有列舉值

承接上篇文章 [《一站式解決使用列舉的各種痛點》](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