首页 > 其他分享 >SpringBoot整合Swagger3

SpringBoot整合Swagger3

时间:2022-10-25 21:58:15浏览次数:40  
标签:return SpringBoot documentation Swagger3 整合 new import springfox com

1、导入相关依赖

<!--swagger-->
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-boot-starter</artifactId>
	<version>3.0.0</version>
</dependency>
<!--swagger-ui-->
<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>knife4j-spring-boot-starter</artifactId>
	<version>3.0.3</version>
</dependency>

2、编写配置类

package com.qbb.config;

import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Value;
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.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * @author QIUQIU&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2022-10-25  20:52
 * @tags 我爱的人在很远的地方, 我必须更加努力
 */
@Configuration
@EnableOpenApi// Swagger 开启生成接口文档功能
public class Swagger3Config {
    /**
     *   application中还配置了mvc,因为springboot与swagger3不兼容
     */
    /**
     * ture 启用Swagger3.0, false 禁用(生产环境要禁用)
     */
    // 是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
    @Value("${knife4j.enable}")
    private Boolean swaggerEnabled;

    @Bean
    public Docket webApiConfig() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(webApiInfo())
                // 是否开启
                .enable(swaggerEnabled)
                .groupName("webApi")
                .select()
                // 扫描的路径使用@Api的controller
                .apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
                // 指定路径处理  PathSelectors.any()代表所有的路径
                //.paths(PathSelectors.any())
                //只显示api路径下的页面
                .paths(PathSelectors.regex("/api/.*"))
                .build();
    }

    @Bean
    public Docket adminApiConfig() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(adminApiInfo())
                // 是否开启
                .enable(swaggerEnabled)
                .groupName("adminApi")
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
                //只显示admin路径下的页面
                .paths(PathSelectors.regex("/admin/.*"))
                .build();
    }

    private ApiInfo webApiInfo() {

        return new ApiInfoBuilder()
                .title("网站-API文档")
                .description("本文档描述了网站微服务接口定义")
                .version("1.0")
                .contact(new Contact("QIUQIU&LL", "https://www.cnblogs.com/qbbit/", "[email protected]"))
                .build();
    }

    private ApiInfo adminApiInfo() {

        return new ApiInfoBuilder()
                .title("后台管理-API文档")
                .description("本文档描述了后台管理系统微服务接口定义")
                .version("1.0")
                .contact(new Contact("QIUQIU&LL", "https://www.cnblogs.com/qbbit/", "[email protected]"))
                .build();
    }
}

image

3、使用

package com.qbb.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qbb.common.R;
import com.qbb.entity.User;
import com.qbb.entity.vo.UserVo;
import com.qbb.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @author QIUQIU&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2022-10-25  20:52
 * @tags 我爱的人在很远的地方, 我必须更加努力
 */
//@Api(tags = "用户管理")
@Tag(name = "用户管理")
@RestController
@RequestMapping("/admin/user")
@CrossOrigin
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    //@ApiOperation(value = "用户列表", notes = "用户列表")
    @Operation(summary = "用户列表")
    @GetMapping("/list/{pageNo}/{pageSize}")
    public R page(
            /*@ApiParam(value = "当前页", defaultValue = "1")*/
            @Parameter(name = "pageNo", description = "当前页")
            @PathVariable(value = "pageNo", required = false) Integer pageNo,
            /*@ApiParam(value = "每页记录数", defaultValue = "10")*/
            @Parameter(name = "pageSize", description = "每页记录数")
            @PathVariable(value = "pageSize", required = false) Integer pageSize,
            /*@ApiParam(value = "searchObj查询条件")*/
            @Parameter(name = "userVo", description = "searchObj查询条件")
            UserVo userVo) {
        Page<User> page = new Page<>(pageNo, pageSize);
        return R.ok().data(userService.pageList(page, userVo));
    }

    @Operation(summary = "保存用户")
    @PostMapping("/save")
    public R save(@Parameter(name = "user", description = "用户对象") @Valid @RequestBody User user) {
        boolean flag = userService.save(user);
        if (flag) {
            return R.ok();
        }
        return R.error().message("保存失败!");
    }
}

4、注意:启动项目会报错 ===> java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null

解决办法:在配置文件中加入以下配置即可

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

5、访问:http://localhost:你的port/doc.html

image

标签:return,SpringBoot,documentation,Swagger3,整合,new,import,springfox,com
From: https://www.cnblogs.com/qbbit/p/16826489.html

相关文章

  • SpringBoot整合Freemarker实现页面静态化
    第一步:创建项目添加依赖:<!--web和actuator(图形监控用)基本上都是一起出现的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-......
  • 【springboot】静态方法从用户协议头获取信息
     publicstaticIntegergetUid(){HttpServletRequestrequest=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();......
  • dedecms5.7整合教程
    ​ 版权所有2009-2022荆门泽优软件有限公司保留所有权利官方网站:荆门泽优软件有限公司官方网站产品首页:Word一键粘贴控件-泽优软件 开发文档:http://www.ncmem.co......
  • dedecms 5.7-ueditor整合教程
    ​ 在线代码: https://gitee.com/xproer/wordpaster-dedecms-ueditor 说明:在安装插件包前,请先备份以上文件和目录。/include/inc/inc_fun_funAdmin.php/include/ue......
  • dedecms v5.7-ckeditor3x插件包整合
    ​ wordpaster-dedecms(织梦CMS)v5.7插件包发布 插件包是已经修改好的文件集合。您可以直接将插件包复制到您的网站中。注意:插件包会替换您的编辑器文件,如果您自已修......
  • Springboot中@Value的使用详解
    Springboot中@Value的使用详解Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@Component等Spring托管的......
  • SpringBoot2配置HikariCP连接池的密码保护
    本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource:spring.datasource.driver-class-name=com.mysql.cj.jdbc.......
  • SpringBoot2配置HikariCP连接池的密码保护
    本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource:1spring.datasource.driver-class-name=com.mysql.cj.......
  • SpringBoot使用WebUploader做大文件的分块和断点续传
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux......
  • SpringBoot 配置内部tomcat https双向验证
    1.在application.properties或者application.yml配置文件中加入server:port:8443ssl:key-store:classpath:xxxx.jks#xxxx.jks的别名key-ali......