zoukankan      html  css  js  c++  java
  • Spring Boot中使用Swagger2构建RESTful API文档

      在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题:

      1.由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。

      2.随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。

      为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档

      要使用Swagger2,首先要引入Swagger2的依赖:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.2.2</version>
    </dependency>

      然后在springboot应用程序中创建Swagger2配置类:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket createRestApi(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.ysl.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("Spring Boot中使用Swagger2构建RESTful APIs")
                    .description("使用Swagger2创建rest api文档")
                    .termsOfServiceUrl("http://www.cnblogs.com/senlinyang")
                    .contact("ysl")
                    .version("V1.0")
                    .build();
        }
    }

      在上述配置类中,通过@Configuration注解,让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2。再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore指定的请求)。

      在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过@ApiOperation注解来给API增加说明、通过@ApiImplicitParams@ApiImplicitParam注解来给参数增加说明:

    @RestController
    public class TestController {
    
        @Autowired
        private User user;
    
        @ApiOperation(value = "获取员工列表",notes = "")
        @ApiImplicitParam(name = "parm", value = "参数", required = true, dataType = "String")
        @PostMapping(value = "/getUsers")
        public ResponseEntity<JsonResult> getEmplsByOrgCode(String parm){
            JsonResult result = new JsonResult();
            System.out.println(parm);
    
            List<UserInfo> infos = new ArrayList<>();
            infos.add(getUserInfo());
            result.setContent(infos);
            result.setResult(true);
            return ResponseEntity.ok(result);
        }
    
        private UserInfo getUserInfo(){
            UserInfo user = new UserInfo();
            user.setAccountName("zqyang2");
            user.setCompanyCode("01");
            user.setCompanyEasId("UUk7nZNlR/WkDxQRNZZ2i8znrtQ=");
            return user;
        }
    }

      完成上述代码添加上,启动Spring Boot程序,访问:http://localhost:8080/swagger-ui.html

      就能看到前文所展示的RESTful API的页面。我们可以再点开具体的API请求,以POST类型的/getUsers请求为例,可找到上述代码中我们配置的Notes信息以及参数getUsers的描述信息,如下图所示。

      

      在上图请求的页面中,我们看到param的Value是个输入框?是的,Swagger除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的Model Schema(黄色区域:它指明了User的数据结构),此时Value中就有了user对象的模板,我们只需要稍适修改,点击下方“Try it out!”按钮,即可完成了一次请求调用!

  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8651247.html
Copyright © 2011-2022 走看看