zoukankan      html  css  js  c++  java
  • SpringBoot整合Swagger-ui的配置方法

    手写Api文档的几个痛点:

    1. 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。
    2. 接口返回结果不明确
    3. 不能直接在线测试接口,通常需要使用工具,比如postman
    4. 接口文档太多,不好管理

    Swagger也就是为了解决这个问题,当然也不能说Swagger就一定是完美的,当然也有缺点,最明显的就是代码移入性比较强。

    其他的不多说,想要了解Swagger的,可以去Swagger官网,可以直接使用Swagger editor编写接口文档,当然我们这里讲解的是SpringBoot整合Swagger2,直接生成接口文档的方式。

    一.引入依赖:

    在pom.xml文件中引入swagger2的依赖,版本根据公司要求引入

    <!-- 引入swagger2依赖-->
    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger2</artifactId>
    	<version>2.9.2</version>
    </dependency>
    <dependency>
    	<groupId>io.springfox</groupId>
    	<artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
    </dependency>
    

     二.在config配置包中添加Swagger配置类

     代码展示:

    package com.example.config;
    
    import org.springframework.beans.factory.annotation.Value;
    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.builders.ResponseMessageBuilder;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.ResponseMessage;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 用@Configuration注解该类,等价于XML中配置beans;
     * 用@Bean标注方法等价于XML中配置bean。
     * Application.class 加上注解@EnableSwagger2 表示开启Swagger,也可以通过
     * 配置文件设置是否开启swagger2
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Value("${swagger.enabled}")
        private Boolean enabled;
    
        /**
         * .apis(RequestHandlerSelectors.basePackage("所需扫描的controller下的所有包")
         * @return
         */
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.example.demo"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("springboot利用swagger2构建api文档")
                    .description("简单优雅的restful风格,http://blog.csdn.net/saytime")
                    .version("1.0")
                    .build();
        }
    
        private List<ResponseMessage> customerResponseMessage() {
            List<ResponseMessage> list = new ArrayList<>();
            list.add(new ResponseMessageBuilder().code(200).message("请求成功").build());
            list.add(new ResponseMessageBuilder().code(201).message("资源创建成功").build());
            list.add(new ResponseMessageBuilder().code(204).message("服务器成功处理了请求,但不需要返回任何实体内容").build());
            list.add(new ResponseMessageBuilder().code(400).message("请求失败,具体查看返回业务状态码与对应消息").build());
            list.add(new ResponseMessageBuilder().code(401).message("请求失败,未经过身份认证").build());
            list.add(new ResponseMessageBuilder().code(405).message("请求方法不支持").build());
            list.add(new ResponseMessageBuilder().code(415).message("请求媒体类型不支持").build());
            list.add(new ResponseMessageBuilder().code(500).message("服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理").build());
            list.add(new ResponseMessageBuilder().code(503).message("服务器当前无法处理请求,这个状况是临时的,并且将在一段时间以后恢复").build());
            return list;
        }
    }
    

    方法一:在启动类上添加注解@EnableSwagger2注解用来开启Swagger2

    方法二:在配置类application.yml中设置是否开启Swagger,通过@Value注解引入配置

     @Value("${swagger.enabled}")
        private Boolean enabled;

    三.Restful 接口测试

    package com.example.demo.controller;
    
    import com.example.demo.service.GradeService;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/grade")
    public class GradeController {
    
        @Autowired
        private GradeService gradeService;
    
        /**
         * 根据姓名查询成绩信息
         * @param name
         * author: zkf
         */
        @ApiOperation(value="获取成绩信息", notes="根据姓名查询成绩信息")
        @ApiImplicitParam(name = "name", value = "姓名", required = true, dataType = "String", paramType = "path")
        @GetMapping(value = "/find")
        public String find(@RequestParam String name){
    
            String score = gradeService.find(name);
            return score;
    
        }
    } 

    项目结构:

    四.Swagger2文档

    启动SpringBoot项目,访问 http://localhost:8081/swagger-ui.html

       

    出现这个页面说明配置成功了,具体里面的内容以及接口测试,应该一看就懂了。这里就不一一截图了...

    五、Swagger注解

    swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

    • @Api:修饰整个类,描述Controller的作用
    • @ApiOperation:描述一个类的一个方法,或者说一个接口
    • @ApiParam:单个参数描述
    • @ApiModel:用对象来接收参数
    • @ApiProperty:用对象接收参数时,描述对象的一个字段
    • @ApiResponse:HTTP响应其中1个描述
    • @ApiResponses:HTTP响应整体描述
    • @ApiIgnore:使用该注解忽略这个API
    • @ApiError :发生错误返回的信息
    • @ApiImplicitParam:一个请求参数
    • @ApiImplicitParams:多个请求参数

    本文转自:https://www.cnblogs.com/jtlgb/p/8532433.html

  • 相关阅读:
    扫雷游戏:C++生成一个扫雷底板
    为《信息学奥赛一本通》平反(除了OJ很差和代码用宋体)
    关于最大公约数欧几里得算法辗转相除及最小公倍数算法拓展C++学习记录
    【Python】如何用较快速度用Python程序增加博客访问量——CSDN、博客园、知乎(应该包括简书)
    STL学习笔记之next_permutation函数
    C++集合容器STL结构Set
    11111111111
    express + mysql实践
    express实践
    ws:一个 Node.js WebSocket 库
  • 原文地址:https://www.cnblogs.com/zhukf/p/12698916.html
Copyright © 2011-2022 走看看