swagger3 快速整合 springboot 2.6.15

参考:
https://swagger.io/
https://swagger.io/docs/
https://swagger.io/tools/swagger-ui/
https://github.com/swagger-api/swagger-core/wiki/
https://github.com/swagger-api/swagger-ui/wiki

http://springfox.github.io/springfox/
https://github.com/springfox/springfox
http://springfox.github.io/springfox/docs/current/
https://github.com/springfox/springfox-demos
https://github.com/springfox/springfox-demos/tree/2.9.2
https://github.com/springfox/springfox-demos/tree/3.0.0


1.引入依赖

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

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.6.15</version>
    </dependency>


2.配置类

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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 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;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 访问:http://localhost:8080/swagger-ui/
 */
@Configuration
@EnableOpenApi
public class Swagger3Config {


    private String basePackage = "com.xxx.xxx.controller";


    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.OAS_30)
                .groupName("api")
                .enable(true) // .enable(!"prod".equals(active))
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage)) // 基于包扫描
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))  // 基于注解
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 基于注解
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API 接口文档")
                .description("Restful API 接口文档")
                .version("1.0")
                .contact(new Contact("联系人姓名","联系人url","联系人email"))
                .termsOfServiceUrl("服务条款URL")
                .license("xxx License Version 1.0")
                .licenseUrl("http://www.xxx.xxx/licenses/LICENSE-1.0")
                .build();
    }




    /**
     * 增加如下配置可解决Spring Boot 6.x 与Swagger 3.0.0 不兼容问题
     **/
    @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));
    }

}



3.编写代码Controller

@Api(tags = "测试接口")
@Controller
@RequestMapping("/test")
public class TestController {

    @Autowired
    private RedisTemplate redisTemplate;


    @ApiOperation("set value 操作")
    @ResponseBody
    @RequestMapping(value = "/set", method = RequestMethod.POST)
    public String setVal(String key, String value) {

        redisTemplate.opsForValue().set(key, value);

        return "success set val";
    }

    @ApiOperation("get 操作")
    @ResponseBody
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public String getValue(String key) {

        String result = (String) redisTemplate.opsForValue().get(key);

        System.err.println("======> 返回结果result:" + result);

        return result;
    }


}


4.访问与测试:http://localhost:8080/swagger-ui/



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swagger是一款用于构建、文档化和测试API的开源框架。它提供了一组工具和约定,可以轻松地生成API文档,并通过交互式UI提供对API的可视化展示和测试。在Spring Boot项目中,可以使用Swagger整合和管理API文档。 对于Spring Boot整合Swagger的具体步骤,可以根据使用的Swagger版本有所不同。下面我将分别介绍Swagger2和Swagger3的整合步骤。 1. Swagger2与Spring Boot整合的步骤: - 在项目的pom.xml文件中添加Swagger2的Maven依赖。 - 创建一个配置类Swagger2Config.java,用于配置Swagger2的相关参数和扫描的API接口。 - 编写API接口,并使用Swagger2的注解来定义接口的文档信息。 - 启动Spring Boot应用,访问Swagger页面即可查看生成的API文档。 2. Swagger3与Spring Boot整合的步骤: - 在项目的pom.xml文件中添加Swagger3的Maven依赖。 - 在启动类上添加@EnableOpenApi注解,开启Swagger3的自动配置。 - 创建一个配置类Swagger3Config.java,用于配置Swagger3的相关参数和扫描的API接口。 - 编写API接口,并使用Swagger3的注解来定义接口的文档信息。 - 启动Spring Boot应用,访问Swagger页面即可查看生成的API文档。 需要注意的是,具体的Maven依赖和配置类的代码可能会因为使用的Swagger版本不同而有所变化。因此,在实际操作中,可以根据项目的需求和使用的Swagger版本来进行相应的调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot整合Swagger](https://blog.csdn.net/qq_34972876/article/details/117693710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot整合Swagger2实例方法](https://download.csdn.net/download/weixin_38651661/12748551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值