zoukankan      html  css  js  c++  java
  • 整合swagger、knife4j

    1.导入pom依赖

    <properties>
        <!-- 版本统一管理-->
        <!--Swagger Resources-->
        <knife4j.version>2.0.4</knife4j.version>
        <springfox.version>2.9.2</springfox.version>
        <swagger.version>1.6.1</swagger.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <!--knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案-->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <!--API开发框架-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${springfox.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-models</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-bean-validators</artifactId>
                <version>${springfox.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    pom依赖

    2. Swagger代码配置类

    package com.config;
    
    import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
    import com.google.common.collect.Lists;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    import org.springframework.core.annotation.Order;
    import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
    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.ArrayList;
    import java.util.List;
    
    /**
     * @Author: 马家立
     * @Date: 2020/12/25 10:44
     * @Description: Swagger配置
     */
    @Configuration
    @EnableSwagger2
    @EnableKnife4j
    @Import(BeanValidatorPluginsConfiguration.class)
    public class SwaggerConfiguration {
    
        @Bean(value = "userApi")
        @Order(value = 1)
        public Docket groupRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(getApiInfo())
                    .useDefaultResponseMessages(false)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.controller"))
                    .paths(PathSelectors.any())
                    .build().securityContexts(getSecurityContexts()).securitySchemes(getSecuritySchemes());
        }
    
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:24
         * @Description: API详情配置
         */
        private ApiInfo getApiInfo() {
            return new ApiInfoBuilder()
                    .title("基于springcloud的接口文档")
                    .description("<div style='font-size:14px;color:red;'>knife4j swagger RESTful APIs</div>")
                    .termsOfServiceUrl("http://127.0.0.1/")
                    .version("1.0")
                    .build();
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:33
         * @Description: 安全上下文。即存储认证授权的相关信息,实际上就是存储"当前用户"账号信息和相关权限
         */
        private List<SecurityContext> getSecurityContexts() {
            return Lists.newArrayList(securityContext(), securityContext1());
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:33
         * @Description: 安全上下文。即存储认证授权的相关信息,实际上就是存储"当前用户"账号信息和相关权限
         */
        private SecurityContext securityContext() {
            return SecurityContext.builder()
                    .securityReferences(defaultAuth())
                    .forPaths(PathSelectors.regex("/.*"))
                    .build();
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:33
         * @Description: 安全上下文1。即存储认证授权的相关信息,实际上就是存储"当前用户"账号信息和相关权限
         */
        private SecurityContext securityContext1() {
            return SecurityContext.builder()
                    .securityReferences(defaultAuth1())
                    .forPaths(PathSelectors.regex("/.*"))
                    .build();
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:34
         * @Description: 安全引用
         */
        List<SecurityReference> defaultAuth() {
            AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            return Lists.newArrayList(new SecurityReference("BearerToken", authorizationScopes));
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:34
         * @Description: 安全引用1
         */
        List<SecurityReference> defaultAuth1() {
            AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            return Lists.newArrayList(new SecurityReference("BearerToken1", authorizationScopes));
        }
    
        /**
         * @Author: 马家立
         * @Date: 2020/12/25 10:37
         * @Description: 描述API如何保护(基本认证,OAuth2,...)。
         */
        private ArrayList<SecurityScheme> getSecuritySchemes() {
            ApiKey apiKey = new ApiKey("BearerToken", "Authorization", "header");
            ApiKey apiKey1 = new ApiKey("BearerToken1", "Authorization-x", "header");
            return Lists.<SecurityScheme>newArrayList(apiKey, apiKey1);
        }
    
    }
    SwaggerConfiguration

    3.具体使用

    import cn.hutool.json.JSONObject;
    import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
    import com.github.xiaoymin.knife4j.annotations.ApiSort;
    import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
    import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;import com.pojo.exam.UserRecentExam;
    import io.swagger.annotations.*;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Author: 马家立
     * @Date: 2020/10/19 14:02
     */
    @ApiSort(14)
    @RestController
    @RequestMapping("/userExam")
    @Api(tags = "用户考试模块")
    public class TUserExamController {
    
        @ApiOperation(value = "考试历史记录")
        @ApiResponses(value = {
                @ApiResponse(code = 200, message = "成功")
                , @ApiResponse(code = 400, message = "失败")
                , @ApiResponse(code = 500, message = "服务器出错")})
        @ApiOperationSupport(order = 1, responses = @DynamicResponseParameters(properties = {
                @DynamicParameter(value = "响应码", name = "code"),
                @DynamicParameter(value = "描述", name = "message"),
                @DynamicParameter(value = "返回结果", name = "data", dataTypeClass = UserRecentExam.class)// 配置返回结果类
        }))
        @ApiImplicitParam(name = "userId", value = "用户id", required = true, dataType = "Long")
        @PostMapping("/recentExamAndHistory")
        public ReturnData<Object> recentExamAndHistory(@ApiParam(hidden = true) @RequestBody JSONObject param) throws Exception {
            Long userId = param.getLong("userId");
            /**
             * 考试历史记录
             */
            return null;
        }
    
    }

     配置返回结果类

    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    /**
     * @Author: 马家立
     * @Date: 2020/10/20 10:14
     * @Description: TODO 考试历史记录
     */
    @Data
    public class UserRecentExam {
    
        @ApiModelProperty(value = "考试试卷名称")
        private String examName;
    
        @ApiModelProperty(value = "平均时间")
        private double avgTime;
    
        @ApiModelProperty(value = "总分数")
        private double totalScore;
    
        @ApiModelProperty(value = "平均分")
        private Long avgScore;
    
        @ApiModelProperty(value = "合格率")
        private Double passRate;
    
    }
  • 相关阅读:
    mysql安装,oracle安装
    各位数之和
    java环境配置针对win10(电脑重装必备) 最后一步很重要
    关于Spring和SpringMVC的总结
    Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
    bootstrapValidator验证的remote中data属性里获取select一直是默认值
    springmvc.xml 中报错:Start state is missing. Add at least one state to the flow
    Hibernage错误:Could not open Hibernate Session for transaction
    关于独立部署web项目到tomcat服务器详情
    idea 2018.1激活方法
  • 原文地址:https://www.cnblogs.com/mjtabu/p/14187853.html
Copyright © 2011-2022 走看看