• 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

  • 相关阅读:
    ie6下使PNG背景图片透明的方法
    CSS图片转换成模糊(毛玻璃)效果兼容版
    对象Object下的属性和方法
    Collection 回顾
    Java IO学习笔记:File类
    Android开发之Instrumentation(自动化测试)
    Android开发之ActivityManager
    Android开发之WindowManager详解
    在Intel® Galileo Gen 2开发板上运行Debian操作系统
    VS2008下安装与配置DirectShow SDK 9.0
  • 原文地址:https://www.cnblogs.com/woju/p/16458733.html
Copyright © 2020-2023  润新知