【Swagger2】【2】SpringBoot整合Swagger2
前言:
做前后端分离的项目,非常重要的一点就是写好接口文档,用Swagger可以自动同步代码里的注解内容,同时可以直接在页面请求接口。
使用过程中,也发现了一些缺点,比如不能记录上次请求接口的数据,必须先发布代码才能看到Swagger页面。所以我们已经改用YApi了,YApi的接口可以手写,也可以从Swagger导入,这个属于工具,不属于代码范畴了。不过我们依然在代码里保留了Swagger,因为注解看着挺清晰的
项目为:SpringBoot + Maven
正文:
访问地址:http://localhost:8080/swagger-ui.html
配置:
pom.xml
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>
Swagger配置类
package com.bf; 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.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; //用@Configuration注解该类,等价于XML中配置beans;用@Bean标注方法等价于XML中配置bean。 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket baseDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(baseInfo()) .groupName("base_api") .select() .apis(RequestHandlerSelectors.basePackage("com.bf.base.web")) .paths(PathSelectors.any()) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } @Bean public Docket testDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(testInfo()) .groupName("test_api") .select() .apis(RequestHandlerSelectors.basePackage("com.bf.test.web")) .paths(PathSelectors.any()) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } private ApiInfo baseInfo() { return new ApiInfoBuilder() .title("基础接口文档") .description("API 描述。。。") .contact(new Contact("微信号", "http://www.test.com", "")) .version("v1.0") .build(); } private ApiInfo testInfo() { return new ApiInfoBuilder() .title("test是我随便起的名字 接口文档") .description("API 描述。。。") .contact(new Contact("企业号", "http://www.test.com", "")) .version("v1.0") .build(); } }
Application
package com.bf; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; import tk.mybatis.spring.annotation.MapperScan; //加上注解@EnableSwagger2 表示开启Swagger @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableResourceServer @MapperScan("com.bf.*.dao") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
使用:
controller
@CrossOrigin(origins = "*") @RestController @Api(tags = {"文章接口"}) public class ArticleController { @ApiOperation(value = "文章详情") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "文章编号", required = true, dataType = "String", paramType = "query"), }) @RequestMapping(value = "article", method = RequestMethod.GET) public Result<Article> getArticleInfo(String id) { return this.theService.getArticleInfo(id); } }
如果传入的参数是用实体类接收的
package com.bf.dnh.params.xx; import io.swagger.annotations.ApiModelProperty; public class AddVo { @ApiModelProperty(name="province", value="所在省", required=true) private String province; @ApiModelProperty(name="city", value="所在市", required=true) private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
参考博客:
SpringBoot整合Swagger2 - jtlgb - 博客园
https://www.cnblogs.com/jtlgb/p/8532433.html