zoukankan      html  css  js  c++  java
  • SpringBoot项目使用Swagger2(丝袜哥)实现接口测试管理

    案例如下:

    安装步骤,在写完的项目中,添加swagger的相关依赖

    使用官方依赖

    1、在pom.xml文件中添加swagger相关依赖
           <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.7.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.7.0</version>
            </dependency>

    也可以:

         <properties>
        <!--swagger 版本 -->
        <swagger.version>2.7.0</swagger.version>
         </properties>
         <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <!-- swagger-ui -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
    第一个是API获取的包,第二是官方给出的一个ui界面。这个界面可以自定义,默认是官方的,对于安全问题,以及ui路由设置需要着重思考。
    2、swagger的configuration

    需要特别注意的是swagger scan base package,这是扫描注解的配置,即你的API接口位置。

    package cn.xnol.user;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    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.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    
    //swagger2的配置文件,在项目的启动类的同级文件建立
    @Configuration
    @EnableSwagger2
    //是否开启swagger,正式环境一般是需要关闭的(避免不必要的漏洞暴露!),可根据springboot的多环境配置进行设置
    @ConditionalOnProperty(name = "swagger.enable",  havingValue = "true")
    public class Swagger2 {
        // swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    // 为当前包路径
                    .apis(RequestHandlerSelectors.basePackage("cn.xnol.user.controller")).paths(PathSelectors.any())
                    .build();
                    //.pathMapping("/stu"); // 在这里可以设置请求的统一前缀
        }
        // 构建 api文档的详细信息函数,注意这里的注解引用的是哪个
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    // 页面标题
                    .title("SpringBoot基于Swagger2构建RESTful API接口测试")
                    // 描述
                    .description("API接口描述")
                    // 创建人信息
                    .contact(new Contact("Agoly", "https://www.cnblogs.com/qmfsun/", ""))
                    // 版本号
                    .version("1.0")
                    .build();
        }
    }

    swagger.enable=true
    springfox.documentation.swagger.v2.path = /user/api-docs

    在controller中的接口路由中添加接口说明信息

    package cn.xnol.user.controller;
    
    import cn.xnol.user.entry.User;
    import cn.xnol.user.service.UserService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletResponse;
    import java.util.List;
    
    // 用于类;表示标识这个类是swagger的资源
    //tags:说明,如果有多个tags,则会以list形式展示
    //value: 说明,可以使用tags替代
    @Api(value = "测试Controller" , tags = "用户服务")
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        UserService userService;
    
        /**
         * 添加学生
         * @param user 要添加的用户对象
         * @return
         */
        @ApiOperation(value="新增用户")
        @PostMapping("/add")
        public User save(User user){
    
            return userService.save(user);
        }
    
        /**
         * 修改学生
         * @param user
         * @return
         */
        @ApiOperation(value = "修改用户", notes = "修改用户信息")
        @PostMapping("/update")
        public User update(User user){
            return userService.save(user);
        }
    
        /**
         * 删除用户
         * @param id 要删除的用户id
         * @return
         */
        @ApiOperation(value = "根据id删除用户", notes = "删除用户")
        @GetMapping("/del/{id}")
        public String del(@PathVariable int id){
            userService.delete(id);
            return "yes";
        }
    
        /**
         * 通过姓名找到信息
         * @param name
         * @return
         */
        @ApiOperation(value = "根据用户名查询", notes="用户名查询")
        @GetMapping("/findByName/{name}")
        public List<User> findByName(@PathVariable String name){
    
            return userService.findUserByName(name);
        }
    
        /**
         * 利用分页查找全部信息
         * @param page
         * @param response
         * @return
         */
        @ApiOperation(value = "分页查询", notes="默认5条记录显示页")
        @GetMapping("/query")
        public Page<User> findByPage(Integer page, HttpServletResponse response){
    
            //异步请求使用
            response.setHeader("Access-Control-Allow-Origin","*");
            if(page==null || page<=0){
                page = 0;
            }else{
                page -= 1;
            }
            return userService.findAll(page,5);
        }
    
    }

    配置完成,启动项目,效果如下:

    http://localhost:8080/api/swagger-ui.html

    参考:

    https://www.jianshu.com/p/49afc7465ce5

    https://www.jianshu.com/p/be1e772b089a

    https://www.cnblogs.com/zs-notes/p/10845741.html

    https://blog.csdn.net/saytime/article/details/74937664

    https://blog.csdn.net/fengyang182/article/details/106635760

  • 相关阅读:
    hadoop 2.5 hdfs namenode –format 出错Usage: java NameNode [-backup] |
    自己动手编译hadoop-2.5.2源码
    CentOS Linux解决Device eth0 does not seem to be present
    Liz Murray成功故事的偶然与必然(转)
    【BZOJ4242】水壶(克鲁斯卡尔重构树,BFS)
    【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
    【agc023E】Inversions(线段树,动态规划)
    【CF183D】T-shirt(动态规划,贪心)
    【BZOJ2423】最长公共子序列(动态规划)
    【BZOJ2118】墨墨的等式(最短路)
  • 原文地址:https://www.cnblogs.com/qmfsun/p/13376476.html
Copyright © 2011-2022 走看看