SpringBoot集成swagger

一、swagger简介

简单说明一下,Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的接口文档。

二、SpringBoot集成swagger

本次集成使用springboot + maven 构建的web项目。

第一步:

pom文件引入依赖

 1       <!-- swagger2 -->
 2       <dependency>
 3             <groupId>io.springfox</groupId>
 4             <artifactId>springfox-swagger2</artifactId>
 5             <version>2.9.2</version>
 6         </dependency>
 7 
 8        <!-- swagger2官方UI --> 
 9         <dependency>
10             <groupId>io.springfox</groupId>
11             <artifactId>springfox-swagger-ui</artifactId>
12             <version>2.9.2</version>
13         </dependency>
14 
15         <!-- 第三方UI -->
16         <dependency>
17             <groupId>com.github.xiaoymin</groupId>
18             <artifactId>swagger-bootstrap-ui</artifactId>
19             <version>1.9.6</version>
20         </dependency> 

第二步:

写配置文件

 1 import org.springframework.context.annotation.Bean;
 2 import org.springframework.context.annotation.Configuration;
 3 import springfox.documentation.builders.ApiInfoBuilder;
 4 import springfox.documentation.builders.PathSelectors;
 5 import springfox.documentation.builders.RequestHandlerSelectors;
 6 import springfox.documentation.service.ApiInfo;
 7 import springfox.documentation.service.Contact;
 8 import springfox.documentation.spi.DocumentationType;
 9 import springfox.documentation.spring.web.plugins.Docket;
10 import springfox.documentation.swagger2.annotations.EnableSwagger2;
11 
12 /**
13  * @description: Swagger2配置类
14  * @author: WhiteCrowZHZ
15  * @date: 2022/2/16 7:52
16  */
17 
18 @Configuration
19 @EnableSwagger2
20 public class Swagger2 {
21 
22     /**
23      * 配置swagger2核心配置
24      * @return
25      */
26     @Bean
27     public Docket createRestApi() {
28         return new Docket(DocumentationType.SWAGGER_2) // 指定api类型为swagger2
29                 .apiInfo(apiInfo()) // 定义api文档汇总信息
30                 .select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) // 指定需要提供文档的Controller类所在的包
31                 .paths(PathSelectors.any()) // 需要生成文档的接口路径
32                 .build();
33     }
34 
35     private ApiInfo apiInfo() {
36         return new ApiInfoBuilder()
37                 .title("这是接口文档页的标题")
38                 .contact(new Contact(
39                         "name",
40                         "http://example.com",
41                         "example@qq.com"))
42                 .description("这是一段关于接口文档的描述信息")
43                 .version("1.0.1")
44                 .termsOfServiceUrl("http://example.com")
45                 .build();
46     }
47 
48 
49 }

第三步:

接口类上增加相关注解

 1 import com.example.demo.model.User;
 2 import io.swagger.annotations.Api;
 3 import io.swagger.annotations.ApiOperation;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.data.redis.core.RedisTemplate;
 6 import org.springframework.web.bind.annotation.GetMapping;
 7 import org.springframework.web.bind.annotation.PathVariable;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 import java.io.Serializable;
12 import java.util.HashMap;
13 import java.util.Map;
14 
15 
16 @RestController
17 @Api(value = "UserCacheController ")
18 public class UserCacheController {
19 
20     //@Autowired
21     //private StringRedisTemplate stringRedisTemplate;
22 
23     @Autowired
24     private RedisTemplate<String, Serializable> redisCacheTemplate;
25 
26     /**
27      * 获取缓存信息
28      * @param id
29      * @return
30      */
31     @ApiOperation(value = "从缓存中获取用户信息")
32     @GetMapping(value = "/cache/user/getCacheUser/{id}")
33     @ResponseBody
34     public Map<String, Object> getCacheUser(@PathVariable Long id) {
35         Map<String, Object> result = new HashMap<String, Object>();
36         result.put("code", "000000");
37         result.put("msg", "success");
38         User u =  (User) redisCacheTemplate.opsForValue().get(String.valueOf(1));
39         System.out.println(u.getUserName());
40         result.put("body", u);
41         return result;
42     }
43 
44     @ApiOperation(value = "将用户信息存入缓存")
45     @GetMapping(value = "/cache/user/cacheUser")
46     @ResponseBody
47     public Map<String, Object> cacheUser() {
48         Map<String, Object> result = new HashMap<String, Object>();
49         result.put("code", "000000");
50         result.put("msg", "success");
51         User u = new User();
52         u.setId("1");
53         u.setAge("23");
54         u.setUserName("huangjinjin");
55         result.put("body", u);
56         redisCacheTemplate.opsForValue().set(String.valueOf(u.getId()), u);
57         return result;
58     }
59 
60 }

注意这里的@Api注解,写在类上的,与我们的配置类相对应。介绍一下相关的注解

@Api: 描述 Controller

@ApiIgnore: 忽略该 Controller,指不对当前类做扫描

@ApiOperation: 描述 Controller类中的 method接口

@ApiParam: 单个参数描述,与@ApiImplicitParam不同的是,他是写在参数左侧的。如( @ApiParam(name="username",value="用户名")Stringusername)

@ApiModel: 描述 POJO对象

@ApiProperty: 描述 POJO对象中的属性值

@ApiImplicitParam: 描述单个入参信息

@ApiImplicitParams: 描述多个入参信息

@ApiResponse: 描述单个出参信息

@ApiResponses: 描述多个出参信息

@ApiError: 接口错误所返回的信息

接下来就是启动项目,访问http://localhost:8885/swagger-ui.html这个地址,这里的8885是我的项目设置端口号.

三、出现的问题

出现原因分析

本人的springboot版本是最新的2.6.9,swagger版本是2.9.2,按着网上的步骤进行环境配置,但在运行时却会出现Failed to start bean ‘documentationPluginsBootstrapper’的问题,在排查了多方原因后,我发现是springboot的版本更新,导致的swagger2的异常

解决方法

(本人的解决方法)在application.properties文件里增加配置:

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

原因是在springboot2.6.6中将SpringMVC 默认路径匹配策略从AntPathMatcher 更改为PathPatternParser,导致出错,解决办法是切换回原先的AntPathMatcher

参考 https://blog.csdn.net/yangzhanghui/article/details/124063438

posted @ 2022-07-08 16:09  莴苣&  阅读(351)  评论(0编辑  收藏  举报