這篇文章聊一點放鬆的內容(反正我以爲挺放鬆挺解壓的,水完這篇文章之後,我準備睡個好覺)html
常常和前端聯調的時候,須要提供文檔(就很煩)。若是是本身新寫的接口還好,怕就怕是以前的老接口,各類返回值的邏輯都不太清楚了,找原來的文檔又找不到,找到了還必定是最新的。此時,我就在想能不能搞個東西讓它自動生成文檔。解決一下這個文檔不跟着代碼走的老大難問題。前端
好在是,優秀的人老是不謀而合,我隨便搜了一下就找到了Swagger
。雖然頁面有點醜,可是無傷大雅。畢竟我是一個有內涵的人,外表什麼的關了燈都同樣(非開車)。因此這裏我就從零記錄了怎麼在SpringBooot
搭建的Web
工程中使用這個工具。git
由於是第一次摸索,不免有用的姿式不太正確的地方,確定不是最佳實踐。嚴格來說不是一篇教程性質的文章,我稱它爲減壓文
,若是有讀者看見了以爲我誤導了他,有本事你來打我啊。github
既然是工具的使用,就作個簡單的自我介紹。我,Swagger
是基於Java
註解生成在線文檔的一個框架,個人原理很是的簡單。做爲一個工具人,大家只要關注如何用好用出最高水平就好了。web
打開你的POM
,引入下面的依賴。沒有POM
?請點擊右上角的關閉按鈕,相信你的心情也會好起來。spring
<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> 複製代碼
另外,須要自動激活配置,通常是在基於annotation
的Spring
配置類中加入@EnableSwagger2
註解。沒有基於註解的配置類?請點擊右上角的關閉按鈕,相信你的心情也會好起來。api
@EnableSwagger2
@Configuration public class PayOpenApiConfiguration{ @Bean public Docket customDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { Contact contact = new Contact("pleuvoir", "https://github.com/pleuvoir/compose-pay", "pleuvoir@foxmail.com"); return new ApiInfoBuilder() .title("支付系統開放API") .description("支付系統開放API") .contact(contact) .version("1.0.0") .build(); } } 複製代碼
還須要定義Docket
對象,用來配置一些生效參數。其中RequestHandlerSelectors.any()
配置的是Swagger
包掃描的範圍,你也能夠配置爲RequestHandlerSelectors.basePackage("io.github.pleuvoir")
工程中指定的包。我最後配置的包,由於用any
它給我搞了一些Error
相關的東西出來,誰讓你出來的,給我回去。app
apiInfo
配置的內容包含標題,描述,版本,聯繫人等信息。相信聰明的你一看就知道,至於裏面還有什麼其餘的配置點進去看看便知,我不想再這叨叨了。框架
有了這些配置框架層面的配置工做就完成了,接下里進入到萬衆期待的api
聲明環節。什麼,你不期待?分手吧,咱們不是一路人。請點擊右上角的關閉按鈕,相信你的心情也會好起來。編輯器
文章開頭提到了,這是一項使用註解來生成文檔的工具。那咱們來看看都有哪些註解吧。爲了方便圍觀,我將它們列在了表格中。
註解 | 做用域 |
---|---|
@Api | 類上 |
@ApiOperation | 方法上 |
@ApiParam | 方法的入參 |
@ApiImplicitParam | 方法的入參 |
@ApiImplicitParams | 方法的入參 |
@ApiModel | 實體類 |
@ApiModelProperty | 實體類中的屬性 |
@ApiIgnore | 類/方法/方法入參 |
說了你可能不信,就這麼幾個註解,還有這些做用域,我看着就感受怪煩的,另外這些做用域還整理的時候還可能搞錯了。到最後我也就只用到了@ApiOperation @ApiModel @ApiModelProperty
,不信你本身往下看。
說一千道一萬,不如看代碼來的實在:
@ApiOperation(value = "發紅包", notes = "建立紅包活動", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RequestMapping(value = "createActivity", method = RequestMethod.POST) public ResultMessageDTO<CreateActivityResultDTO> createActivity(@ApiParam @RequestBody CreateActivityDTO createActivityDTO) { ResultMessageDTO data = new ResultMessageDTO(); data.setData(System.currentTimeMillis()); return data; } @ApiModel("建立紅包活動返回實體類") public class CreateActivityDTO implements ToJSON { @ApiModelProperty("總金額") private BigDecimal totalAmount; @ApiModelProperty("用戶編號") private Long userId; @ApiModelProperty("紅包總數") private Integer total; } @ApiModel("建立紅包活動返回結果實體類") public class CreateActivityResultDTO { @ApiModelProperty("活動id") private Long activityId; } 複製代碼
別人的教程都說要在Controller
的類上加@Api
註解,我試了不加也沒事,我就不加了。我是一個簡單質樸的人,我喜歡簡單,簡單就是美,我但願我愛的人也是一個簡單的人。
配置完成後根據你項目的請求地址訪問自帶的頁面,我這裏是http://127.0.0.1:8081/swagger-ui.html
,能夠看到一個綠汪汪
的頁面彈了出來。固然了,我這裏只是示例,支付系統的相關接口尚未實現,因此就拿其它的濫竽充數
。
對了,當我點擊了發紅包的按鈕後發現了一件事情:
竟然有個按鈕讓我Try一Try
,這我不能忍啊,我就試着踹了一下,沒想到索然無味之中發現了新的快樂。
這個東西有點意思,能夠直接請求到後臺,是否是之後能夠偷懶不用Postwomen
了,想到這裏我有點小激動。
看到這個返回值我不由感慨,科技從業者的快樂就是這麼簡單
。很久沒口吐芬芳了,雖然不知道罵了誰,可是好減壓啊!今天我只想安安靜靜的作一個祖安男孩
。
guava
版本衝突根據報錯的提示,寧肯能須要排掉一個版本,至於排哪一個你本身去試。
訪問/swagger-ui.html
找不到頁面,緣由是Swagger
的頁面是打在JAR
中的。
解決方法:若是是在Springboot
中,在實現WebMvcConfigurer
的配置類中增長以下代碼:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } 複製代碼
而後再訪問就能夠了。若是沒好,你本身再查查,我也不會。
我沒什麼想說的,祝你們身體健康,萬事如意,看完這篇文章後又年輕了五歲。沒有人永遠十八歲,但年年有人十八歲。晚安,美夢。