如何使用swagger?
1.在pom.xml中引入相關依賴
<!--swagger2 相關依賴--> <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.在config/swagger包中建立SwaggerConfig類(此工程的總體概述)
package com.bocom.smp.config.swagger; ? import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; ? @Configuration @EnableSwagger2 public class SwaggerConfig { /** * 初始化創建Swagger Api */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) // 詳細信息定制 .apiInfo(apiInfo()) .select() // 指定當前包路徑 .apis(RequestHandlerSelectors.basePackage("com.bocom.smp.controller")) // 掃描所有 .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } /** * 添加摘要信息 */ private ApiInfo apiInfo() { return new ApiInfoBuilder() // 標題 .title("<register-server接口文檔>") // 描述 .description("register-server主要用于普通服務的增刪改查等") // 文檔版本 .version("1.0.0") .license("Apache License Version 2.0") .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0") .build(); } }
3.在config包下的WebMvcConfig類中加入如下內容(swaggerUI映射)
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; ? @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/"); }
4.這里給出一個使用swagger注解的示例controller
這個示例中使用了lombok,非必選。請自行引入依賴。
package com.bocom.smp.controller; ? import io.swagger.annotations.*; import lombok.Data; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; ? @RestController @RequestMapping("/swagger") @Api(description = "SwaggerTest接口") public class SwaggerTestController { ? @GetMapping("/v1/get/{id}") @ApiOperation("GET接口") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "String") }) public String get(@PathVariable String id) { return "hello swagger2 "+id; } @PostMapping("/v1/post/map") @ApiOperation("POST接口") @ApiImplicitParams({ @ApiImplicitParam(name = "map", value = "MAP參數", required = true, dataType = "Map") }) public String postMap(@RequestBody Map<String, Foo> map) { return "hello: "+map; } @PostMapping("/v1/post/list") @ApiOperation("POST接口") @ApiImplicitParams({ @ApiImplicitParam(name = "list", value = "list參數", required = true, dataType = "List") }) public String postList(@RequestBody List<Foo> list) { return "hello: "+list; } @PutMapping("/v1/object") @ApiOperation("PUT接口") @ApiImplicitParams({ @ApiImplicitParam(name = "foo", value = "用戶ID", required = true, dataType = "Foo") }) public String object(@RequestBody Foo foo) { return foo.toString(); } @DeleteMapping("/v1/delete/{id}") @ApiOperation("DELETE接口") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "String") }) public String delete(@PathVariable String id) { return "\t"+id; } } // 實體類同樣可以使用注解 @Data @ApiModel(description = "foo實體類") class Foo{ @ApiModelProperty(value = "姓名") private String name; @ApiModelProperty(value = "年齡") private String age; } ?
5.工程啟動后,通過訪問http://IP:PORT/APP_NAME/swagger-ui.html來查看接口情況