首页 > 其他分享 >SpringBoot集成Knife4j

SpringBoot集成Knife4j

时间:2023-03-03 13:23:48浏览次数:74  
标签:集成 Knife4j return SpringBoot private new public String

转载自: SpringBoot集成Knife4j - hviger - 博客园 (cnblogs.com)

Knife4j简介

Knife4j 官网地址:https://doc.xiaominfo.com/

knife4j 是为Java MVC框架集成Swagger生成Api文档的增强解决方案。

Knife4j 的前身是swagger-bootstrap-ui,是一个纯swagger-ui的ui皮肤项目。

取名knife4j是希望她能像一把匕首一样小巧、轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui前端。

引入依赖

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

添加yml配置

knife4j:
  # 是否开启Swagger
  enabled: true
  # 请求前缀
  pathMapping: /dev-api
  # 是否开启Knife4j增强模式,默认是 false
  enable: true

查看更多增强模式配置:https://doc.xiaominfo.com/docs/features/enhance

配置Knife4j

@Configuration
@EnableKnife4j
public class Knife4jConfig
{

    /** 是否开启Swagger */
    @Value("${knife4j.enabled}")
    private boolean enabled;

    /** 设置请求的统一前缀 */
    @Value("${knife4j.pathMapping}")
    private String pathMapping;

    /**
     * 创建API
     */
    @Bean
    public Docket createRestApi()
    {
        return new Docket(DocumentationType.OAS_30)
                // 是否启用Swagger
                .enable(enabled)
                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
                .apiInfo(apiInfo())
                // 分组名称
                .groupName("China")
                // 设置哪些接口暴露给Swagger展示
                .select()
                // 扫描所有有注解的api,用这种方式更灵活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 扫描指定包中的swagger注解
                // .apis(RequestHandlerSelectors.basePackage("com.cn.project.tool.swagger"))
                // 扫描所有 .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                /* 设置安全模式,swagger可以设置访问token */
                // .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                .pathMapping(pathMapping);
    }

    /**
     * 安全模式,这里指定token通过Authorization头请求头传递
     */
    private List<SecurityScheme> securitySchemes()
    {
        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
        return apiKeyList;
    }

    /**
     * 安全上下文
     */
    private List<SecurityContext> securityContexts()
    {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
                        .build());
        return securityContexts;
    }

    /**
     * 默认的安全上引用
     */
    private List<SecurityReference> defaultAuth()
    {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }

    /**
     * 添加摘要信息
     */
    private ApiInfo apiInfo()
    {
        // 用ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // 设置标题
                .title("后台管理系统_接口文档")
                // 描述
                .description("用于XXX,具体包括XXX,XXX模块...")
                // 作者信息
                .contact(new Contact("hviger", null, null))
                // 版本
                .version("1.0.1")
                .build();
    }
}

放行Knife4j请求

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

使用Knife4j注解标记接口

@Api(tags = "测试路由")
@RestController
@RequestMapping("/test")
public class TestController {

    @ApiOperation("测试get")
    @ApiImplicitParam(name = "name", value = "姓名", required = true)
    @GetMapping("test1")
    public String test1(@RequestParam(value = "name") String name) {
        return "hello," + name;
    }

    @ApiOperation("测试post")
    @PostMapping("test2")
    public String test2(@RequestBody TestEntity testEntity) {
        return testEntity.getName() + ":" + testEntity.getSex();
    }
}
@ApiModel
@Data
public class TestEntity {

    @ApiModelProperty(value = "姓名", required = true)
    private String name;
    @ApiModelProperty(value = "性别", required = true)
    private String sex;
}

访问页面

访问地址:http://localhost:8080/doc.html

image

标签:集成,Knife4j,return,SpringBoot,private,new,public,String
From: https://www.cnblogs.com/huaixiaonian/p/17175261.html

相关文章

  • springboot启动报错 Failed to scan *****/derbyLocale_ja_JP.jar from classloader h
    springboot启动报错Failedtoscan*****/derbyLocale_ja_JP.jarfromclassloaderhierarchy 这两天自己在玩虚拟机,想把线上的平台复制一份到虚拟机上,jdk,tomcat服务,防......
  • Java项目集成工作流activiti,会签
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot......
  • springboot jpa hibernate mysql clickhouse 多数据源
    ClickhouseConfig.java@Configuration@EntityScan(basePackages="test.entity.clickhouse")@EnableJpaRepositories(basePackages="test.repository.clic......
  • 视频上传及压缩SpringBoot
    在SpringBoot项目中实现视频的上传和下载,地址都是存放至阿里云的,但是由于视频数量越来越多占用的内存也越来越大,导致服务器内存不足,公司为了减少服务器开支,要求我们研......
  • Springboot打包部署的步骤
    1.配置pom.xml引入插件<groupId>com.bostech</groupId><artifactId>dcs</artifactId><version>0.0.1-SNAPSHOT</version><!--注意把packaging标签改为jar......
  • springboot gradle 集成流程引擎activiti
    plugins{id'org.springframework.boot'version'2.1.4.RELEASE'id'io.spring.dependency-management'version'1.0.13.RELEASE'id'java'}group=......
  • springboot application.yml 配置说明
    1.springbootapplication.yml配置说明server:port:8080spring:datasource:username:rootpassword:123456driver-class-name:com.mysql.cj.......
  • 我们软件与钉钉集成调用的实例测试效果
    我们的软件已经完成阿里钉钉的接口集成工作。下面是调用接口获取到的查询结果图示:......
  • DataEase 集成 CAS 实现用户单点登录
    场景介绍随着企业IT场景越来越复杂,应用平台不断增加,用户需要管理每个应用平台的登录信息;用户集中管理平台(如:“LDAP”)可以使用户在所有应用平台使用同一个用户名进行登录;而......
  • SpringBoot内部方法之间跳转
    从controller的一个方法跳转到另一个方法中可以通过重定向实现,重定向具体语法:redirect:要访问的网址具体请看下面示例:@Controller@RequestMapping("/user")publicclass......