修改springfox-swagger原始碼,使example中時間格式預設為“yyyy-MM-dd HH:mm:ss”
阿新 • • 發佈:2019-10-31
修改swagger原始碼,使example中時間格式預設為“yyyy-MM-dd HH:mm:ss”
前言
簡單點說,在swagger中,怎麼能針對以下vo中的java.util.Date型別的欄位:createDate,
能在swagger的介面上達到下面的效果呢?
如果嘗試過的同學,可能知道,這裡,如果不做任何修改的話,出來的效果是下面這樣的:
解決方法
我一開始百度搜了下,找到了這篇:
https://www.cnblogs.com/yanfeiLiu/p/9792042.html
它的解決辦法呢,是在ApiModelProperty
註解上加了 example
屬性,即下圖所示:
/** * 建立時間 */ @ApiModelProperty(value = "建立時間", example = "2019-10-30 15:34:12") private Date createDate;
我吧,感覺這樣也很麻煩,如果能夠感知到是Date型別,自動就把 example
設為上述格式多好?
不用多說,估計要改原始碼了。
我的辦法是,從 example()
方法入手,查詢使用到它的地方(記得maven要勾選下載原始碼),我們發現瞭如下兩處:
斷點打在上面的方法內之後,再次執行,尋找合適的切入點,發現其呼叫堆疊如下:
最終修改方法如下:
在工程裡,新建了一個同包名同類名的 springfox.documentation.builders.ModelPropertyBuilder
類,然後修改如下方法:
這裡,簡單附上程式碼,修改得很少:
## springfox.documentation.builders.ModelPropertyBuilder /** * Updates the example * @param example - example value * @return this * @deprecated @since 2.8.1 Use the one with Object as parameter */ @Deprecated public ModelPropertyBuilder example(String example) { if ("java.util.Date" .equals(qualifiedType)) { this.example = "2019-10-30 15:34:12"; }else { this.example = defaultIfAbsent(example, this.example); } return this; }
具體的swagger版本可能有微小差別,但差別應該不大,我這邊是最新版的2.9.2
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
總結
整體來說,只是覆蓋jar包的類,很簡單,主要是理清其邏輯。如果不清楚怎麼覆蓋jar包的類,可參考我上一篇文章。
懶要懶到底,能自動的就不要手動,Hibernate正向工程完成Oracle資料庫到MySql資料庫轉換(含欄位轉換、註釋