引入maven依賴
<!-- swagger2--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <!--防止進入swagger頁面報類型轉換錯誤,排除2.9.2中的引用,手動增加1.5.21版本--> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.21</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.21</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
創建配置類
SwaggerConfig.java
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; /** * @author yvioo。 */ @Configuration @EnableSwagger2 //開啟Swagger2 public class SwaggerConfig { /** * 配置Swagger的Docket的bean實例 * @return */ @Bean public Docket docket(Environment environment) { //設置只在開發中環境中啟動swagger Profiles profiles=Profiles.of("dev"); //表示如果現在是dev環境,則返回true 開啟swagger boolean flag=environment.acceptsProfiles(profiles); /*添加接口請求頭參數配置 沒有的話 可以忽略*/ ParameterBuilder tokenPar = new ParameterBuilder(); List<Parameter> pars = new ArrayList<>(); tokenPar.name("token").description("令牌").defaultValue("設置token默認值").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); pars.add(tokenPar.build()); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) //是否啟動swagger 默認啟動 .enable(flag) //所在分組 .groupName("yvioo") .select() //指定掃描的包路徑 .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) //指定掃描的請求,這里表示掃描 /hello/ 的請求 //.paths(PathSelectors.ant("/hello/**")) .build() .globalOperationParameters(pars); } /** * 配置ApiInfo信息 * @return */ private ApiInfo apiInfo() { //作者信息 Contact author = new Contact("yvioo", "https://www.cnblogs.com/pxblog/", "111@qq.com"); return new ApiInfo( "Swagger測試", "Swagger描述", "1.0", "urn:tos", author, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList() ); } }
但是如果有其他配置繼承了 WebMvcConfigurationSupport 就需要增加資源映射 不然會失效
@Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport { /** * 發現如果繼承了WebMvcConfigurationSupport, 需要重新指定靜態資源 * */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations( "classpath:/static/"); registry.addResourceHandler("swagger-ui.html").addResourceLocations( "classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations( "classpath:/META-INF/resources/webjars/"); super.addResourceHandlers(registry); } }
測試用戶實體類
User.java
package com.example.demo.entity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @ApiModel("用戶實體類 User") //增加實體類接口注釋 @Data //使用Lombok插件自動生成get set方法,這樣才能在swagger中顯示屬性值 public class User { @ApiModelProperty("用戶ID") //增加字段接口注釋 private Integer id; @ApiModelProperty("用戶名") private String username; }
測試控制器
SwaggerController.java
package com.example.demo.controller; import com.example.demo.entity.User; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController;
@Api(description = "該控制器描述") @RestController public class SwaggerController { @GetMapping("/hello") public String hello(){ return "hello"; } /** * 接口返回值含有實體類,就會被swagger掃描 * * @return */ @ApiOperation("查詢用戶方法注釋") @GetMapping(value = "/get/{id}") public User get(@ApiParam("請求參數注釋") @PathVariable(value = "id")Integer id){ return new User(); } }
@ApiImplicitParam:
作用在方法上,表示單獨的請求參數
參數:
1. name :參數名。
2. value : 參數的具體意義,作用。
3. required : 參數是否必填。
4. dataType :參數的數據類型。
使用dev環境 啟動項目后 瀏覽器打開 http://localhost:8081/swagger-ui.html#/ 我這里用的端口是8081
顯示效果
整合 knife4j框架參考:https://www.cnblogs.com/pxblog/p/14831211.html