springboot 2.7版本整合swagger2代码实现

这篇具有很好参考价值的文章主要介绍了springboot 2.7版本整合swagger2代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.导入swagger2依赖

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

2.添加swagger配置类

package com.xiyuan.cluster.middle.config;

import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
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;

import java.util.*;

@EnableWebMvc
@EnableSwagger2
@Configuration
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())

                .build()
                .securitySchemes(Collections.singletonList(apiKey()))
                .securityContexts(Collections.singletonList(securityContext()));
    }

    private static ApiKey apiKey() {
        return new ApiKey("token", "token", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(Collections.singletonList(new SecurityReference("token", new AuthorizationScope[0])))
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .description("**项目管理平台")
                .title("**项目管理平台接口api").build();
    }
}

3.启动项目就这么easy 

4.easy个屁,报错了,抛出了异常信息: 

 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()

   Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException:
    Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()

5.发现这是springboot版本过高然后在 SwaggerConfig配置类里加入以下代码(如果没报错则不需要加下面的代码):

   /**
     * 解决springboot版本过高与swagger2不兼容问题
     *  Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException:
     *  Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()
     *  " because "this.condition" is null
     * @param webEndpointsSupplier
     * @param servletEndpointsSupplier
     * @param controllerEndpointsSupplier
     * @param endpointMediaTypes
     * @param corsProperties
     * @param webEndpointProperties
     * @param environment
     * @return
     */
    @Bean
    public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
        List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
        Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
        allEndpoints.addAll(webEndpoints);
        allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
        allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
        String basePath = webEndpointProperties.getBasePath();
        EndpointMapping endpointMapping = new EndpointMapping(basePath);
        boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
        return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
    }

    private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
        return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
    }

并且在yml文件里添加:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

这样便可以解决上面异常。

6.然后在controller层或者参数接受的实体类层添加注解,使得swagger界面中能显示出每个接口的用途及参数描述信息。

package com.xiyuan.cluster.middle.controller;


import com.xiyuan.cluster.middle.common.Result;
import com.xiyuan.cluster.middle.entity.SysUserRegister;
import com.xiyuan.cluster.middle.service.ISysUserRegisterService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 人员注册表 前端控制器
 * </p>
 *
 * @author jerry
 * @since 2023-06-27
 */
@RestController
@RequestMapping("/dms/register")
@Api(tags = "用户信息注册")
public class SysUserRegisterController {
    @Autowired
    private ISysUserRegisterService registerService;

    /**
     * 信息注册接口
     *
     * @param register
     * @return
     */
    @PostMapping("/register")
    @ApiOperation("信息注册接口")
    public Result register(@RequestBody SysUserRegister register) throws Exception {
        registerService.register(register);
        return Result.success();
    }

    /**
     * 获取审批列表接口
     *
     * @param areaId
     * @return
     */
    @GetMapping("/queryCheckList")
    @ApiOperation("获取审批列表接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "areaId", value = "区域ID", dataType = "String", required = true),
    })
    public Result<List<SysUserRegister>> queryCheckList(@RequestParam String areaId) throws Exception{
        return Result.success(registerService.queryCheckList(areaId));
    }

    /**
     * 用户信息审核接口
     *
     * @param registers
     * @return
     */
    @PostMapping("/check")
    @ApiOperation("用户信息审核接口")
    public Result check(@RequestBody SysUserRegister registers) throws Exception {
        registerService.check(registers);
        return Result.success();
    }
}
package com.xiyuan.cluster.middle.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 人员注册表
 * </p>
 *
 * @author jerry
 * @since 2023-06-27
 */
@Data
@TableName("sys_user_register")
@ApiModel(value = "用户注册实体类",description = "用于传输用户注册信息")
public class SysUserRegister implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 姓名
     */
    @ApiModelProperty(value = "用户姓名",required = true)
    private String name;

    /**
     * 身份证
     */
    @ApiModelProperty(value = "身份证",required = true)
    private String sfz;

    /**
     * 电话号码
     */
    @ApiModelProperty(value = "电话号码",required = true)
    private String phone;

    /**
     * 角色
     */
    @ApiModelProperty(value = "用户角色",required = true)
    private String role;

}

 7.最后浏览器输入http://127.0.0.1:8080/swagger-ui/index.html 浏览器上出现swagger可视化界面

可是页面是显示又出现了问题

Unable to render this definition

The provided definition does not specify a valid version field.

Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.0.n (for example, openapi: 3.0.0).

springboot 2.7版本整合swagger2代码实现,spring boot,java

 8.排查了好长时间一直以为是版本冲突造成的,网上也查了好多相关的博客都没能解决,最后误打误撞把项目里的拦截器类注释了发现这个页面能正常显示了,估计是拦截里面把swagger相关的页面给拦截了,最后swagger页面能正常显示了:

springboot 2.7版本整合swagger2代码实现,spring boot,java

9.然后狗日的甲方说提供的swagger页面不够美观,又被迫换了一个好看点的UI页面。

knife4介绍:

        knife4j 是基于 Swagger 构建的一个增强版工具,它在 Swagger 的基础上进行了扩展和优化。Swagger 是一个用于设计、构建和文档化 RESTful API 的开源框架,而 knife4j 则是在 Swagger 的基础上提供了更多的功能和便利性。它为开发人员提供了更友好的界面、更丰富的功能和更灵活的配置选项,使得 API 文档的管理和使用更加便捷。因此,可以说 knife4j 是 Swagger 的一种增强和扩展。

10.pom文件加入 knife4j 依赖包:

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.9</version>
        </dependency>

11.加入配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 配置静态资源访问路径
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 静态资源访问路径和存放路径配置
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/","classpath:/public/");
        // swagger访问配置
        registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/","classpath:/META-INF/resources/webjars/");
    }
}

然后浏览器输入地址:http://127.0.0.1:8080/doc.html 页面就换成了最新的:

springboot 2.7版本整合swagger2代码实现,spring boot,java

最后如果在访问swagger页面的时候服务器抛出下面的异常:

java.lang.NumberFormatException: For input string: ""

springboot 2.7版本整合swagger2代码实现,spring boot,java

则引入下面的两个依赖便能解决:

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>

 文章来源地址https://www.toymoban.com/news/detail-703665.html

到了这里,关于springboot 2.7版本整合swagger2代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 Swagger2 纠错

            因为我要建立的是微服务的项目,需要建立许多模块,以至于我在父工程中引入了当前模块,然后我在子模块中又引入了当前模块,造成了冲突。         另外一种解决方法是,经过上网查证,可能由于Spring Boot和Swagger版本的问题,Spring Boot2.6以上的版本,需要使用

    2024年02月12日
    浏览(38)
  • Java技术-接口文档-Swagger2&Swagger3&接口文档UI整合

    目录 一、Swagger2完整用法 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 7.Swagger3页面效果 二、Swagger3完整用法 三、Swagger整合Knife4jUi 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 四、注释和参数讲解

    2024年02月16日
    浏览(48)
  • Springboot+swagger2

    1.swagger配置 2.请求路径  http://localhost:8006/swagger2/swagger-ui.html 3.Swagger2 注解整理  4.代码示例          

    2024年02月09日
    浏览(38)
  • SpringBoot——Swagger2 接口规范

    优质博文:IT-BLOG-CN 如今, REST 和微服务已经有了很大的发展势头。但是, REST 规范中并没有提供一种规范来编写我们的对外 REST 接口 API 文档。每个人都在用自己的方式记录 api 文档,因此没有一种标准规范能够让我们很容易的理解和使用该接口。我们需要一个共同的规范和

    2024年02月04日
    浏览(45)
  • SpringBoot——2.7.3版本整合Swagger3

    Swagger2(基于openApi3)已经在17年停止维护了,取而代之的是 sagger3(基于openApi3),而国内几乎没有 sagger3使用的文档,百度搜出来的大部分都是swagger2的使用,这篇文章将介绍如何在 java 中使用 openApi3(swagger3)。 Open API OpenApi是业界真正的 api 文档标准,其是由 Swagger 来维护

    2024年02月11日
    浏览(35)
  • SpringBoot使用Swagger2生成接口文档

            通过一下配置,将Swagger2自动配置进SpringBoot中             通过@Api注解和@ApiOperation注解说明模块作用及接口说明。         通过访问路径http://localhost:8088/doc.html,说明一下8088是我SpringBoot的端口号,你们填你们自己的,不同版本的Swagger访问的路径是不一样的。

    2024年01月25日
    浏览(43)
  • SpringBoot项目中使用Swagger2及注解解释(详细)

    SpringBoot项目中使用Swagger2及注解解释 一、导入Swagger坐标依赖 其中版本最常用2.9.2 二、在spring启动类添加注解@EnableSwagger2 @EnableSwagger2是springfox提供的一个注解,代表swagger2相关技术开启。会扫描当前类所在包,及子包中所有类型的swagger相关注解,做swagger文档的定制 三、启动

    2023年04月18日
    浏览(80)
  • 关于Springboot集成swagger2出现的swagger-resouces和ui请求的404问题

    本项目集成的是增强版的Swagger文档,使用的增强版的UI com.github.xiaoymin 按照上面的配置,在本地测试效果是正常的 在红色标记的地方是正常显示的,但是按照这个配置打war包部署到服务器或者本地的tomcat中就会出现404的现象。 出现上面的这种情况时,看过很多网上的帖子说

    2024年04月17日
    浏览(33)
  • springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)

    一、注解的使用 和 说明 结构化说明如下: @Api:用在请求的类上,表示对类的说明      tags=\\\"说明该类的作用,可以在UI界面上看到的注解\\\"    (也就是给类取别名)     value=\\\"该参数没什么意义,在UI界面上也看到,所以不需要配置\\\"    @ApiOperation:用在请求的方法上,说

    2024年02月03日
    浏览(45)
  • SpringBoot - 集成Swagger2、Knife4j接口文档/升级版swagger-bootstrap-ui配置以及账号密码登录

    请注意@Configuration和@EnableSwagger2注解。这两个注解分别表示这是一个配置类,以及启用了Swagger 2。只有在这两个注解都存在的情况下,Swagger才会被正确启用。 如果您的项目使用的是Swagger 3(即OpenAPI 3),则配置文件可能如下所示: 访问 http://localhost:8080/swagger-ui.html (假设项

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包