?????個人認為swagger主要作用在于前后端分離項目服務(wù)端接口信息界面化苟翻,有助于接口的聯(lián)調(diào)需忿,當然也可以用于服務(wù)端接口測試(在header中加參數(shù)等等需要在Java端配置,比較麻煩,還不如直接使用postman)溢谤,功能還是相當強大的。
1.首先引入swagger依賴
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
2.配置啟動類的編寫
具體代碼如下
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
這是相當簡潔的配置了,自動掃面所有的接口信息所刀,@Configuration注解表明他是一個配置類衙荐,@EnableSwagger2開啟swagger2。
3.解釋接口信息的一些注解
- @Api:修飾整個類浮创,描述Controller的作用
- @ApiOperation:描述一個類的一個方法忧吟,或者說一個接口
- @ApiParam:單個參數(shù)描述
- @ApiModel:用對象來接收參數(shù)
- @ApiProperty:用對象接收參數(shù)時,描述對象的一個字段
- @ApiResponse:HTTP響應(yīng)其中1個描述
- @ApiResponses:HTTP響應(yīng)整體描述
- @ApiIgnore:使用該注解忽略這個API
- @ApiError :發(fā)生錯誤返回的信息
- @ApiParamImplicitL:一個請求參數(shù)
- @ApiParamsImplicit 多個請求參數(shù)
注:這里引用文章SpringBoot非官方教程 | 第十一篇:springboot集成swagger2蒸矛,構(gòu)建優(yōu)雅的Restful API所寫瀑罗。
3.攔截器下的swagger配置與使用
攔截器配置的攔截路徑包含了swagger的路徑,這樣會導致swagger-ui頁面沒用接口信息顯示雏掠,所以就需要在攔截器配置"忽略路徑",配置如下斩祭。
@Component
class WebMvcConfigurer extends WebMvcConfigurerAdapter {
//增加攔截器
public void addInterceptors(InterceptorRegistry registry){
if(swaggerShow){
registry.addInterceptor(new MyInterceptor()) //指定攔截器類
.addPathPatterns("/**") //指定該類攔截的url
.excludePathPatterns("/swagger-resources/**"); //指定不攔截url(swagger)
}else {
registry.addInterceptor(new MyInterceptor()) //指定攔截器類
.addPathPatterns("/**"); //指定該類攔截的url
}
}
}
上述的swaggerShow字段為配置在yml配置文件中是否開啟swagger(一般在生產(chǎn)環(huán)境就關(guān)閉swagger,開發(fā)環(huán)境打開用于調(diào)式與接口的對接工作)
@Value("${swagger.show}")
private boolean swaggerShow;
swagger:
show: true