美文网首页
Swagger2使用教程

Swagger2使用教程

作者: kacen | 来源:发表于2020-09-13 13:23 被阅读0次

    我是kacen,一个会点前端的java后端开发工程师。
    今天来插曲一下,来介绍一下Swagger的使用。

    简介

      Swagger是为了解决企业中接口(api)中定义统一标准规范的文档生成工具。方便各大后端小基友的懒问题,但是写注解也是妥妥的麻烦,但是如果版本迭代快或者人员的流动性大,会导致很多问题。所以很多企业中都会有统一的规范文档,来定义接口标准。

    注释和参数讲解

    参数说明:
    name -- 参数名
    value -- 参数说明
    required -- 是否必须填写
    dataType -- 数据类型
    paramType -- 参数类型
    example -- 举例
    常用注解说明:

    • @Api()用于类;

    表示标识这个类是swagger的资源

    • @ApiOperation()用于方法;

    表示一个http请求的操作

    • @ApiParam()用于方法,参数,字段说明;

    表示对参数的添加元数据(说明或是否必填等)

    • @ApiModel()用于类

    表示对类进行说明,用于参数用实体类接收

    • @ApiModelProperty()用于方法,字段

    表示对model属性的说明或者数据操作更改

    • @ApiIgnore()用于类,方法,方法参数

    表示这个方法或者类被忽略

    • @ApiImplicitParam() 用于方法

    表示单独的请求参数

    • @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam

    具体使用说明:

    1.@Api()
      ···
      @Api("测试用例1")
      @Controller
      public class swaggerTestUse(){
      }
    
    2.@ApiOperation()
    ···
    @Api("测试用例1")
    @Controller
    public class swaggerTestUse(){
        @ApiOperation(value = "apiOperationSwaggerTest", notes = "apiOperationSwagger测试")
        public void apiOperationSwaggerTest(){
        }
    }
    
    3.@ApiParam()
    ···
    @Api("测试用例1")
    @Controller
    public class swaggerTestUse(){
        @ApiOperation(value = "apiOperationSwaggerTest", notes = "apiOperationSwagger测试")
        public void apiOperationSwaggerTest(@ApiParam(name = "id", value = "id入参", required = true) Integer id){
        }
    }
    
    4.@ApiModel()
    ···
    @ApiModel(description = "测试实体类", value = "测试实体类")
    public class Album implements Serializable {
        ···
    }
    
    
    5.@ApiModelProperty()
    ···
    @ApiModel(description = "测试实体类", value = "测试实体类")
    public class User implements Serializable {
        @ApiModelProperty(name = "userName", value = "用户名", required = false, exmaple = "小明")
        private String userName;
    }
    
    
    6.@ApiImplicitParams() 和@ApiImplicitParam()这两是兄弟就不分开写了
        ···
      @Api("测试用例1")
      @Controller
      public class swaggerTestUse(){
          @ApiOperation(value = "apiOperationSwaggerTest", notes = "apiOperationSwagger测试")
          @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "id入参", required = true, dataType = "Integer", paramType = "query"),
                            @ApiImplicitParam(name = "brand", value = "brand", required = true, dataType = "BRAND", paramType = "body")
        })
          public void apiOperationSwaggerTest(Integer id, Brand band){
          }
      }
    

    Swagger2实战/Swagger具体使用说明(附带环境参数开关配置和springboot WebConfiguration的实现过滤)

    看完以上基本的使用说明,接下来我们就开始实战吧!!!

    步骤1:当然是pom文件导入依赖
    <!--swagger-->
            <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>
    
    步骤2:启动类添加@EnableSwagger2注解
    @SpringBootApplication
    @EnableSwagger2
    @ComponentScan(basePackages = {""})//为什么写这个,有的小伙伴扫不到包的请手动扫包
    public class ServiceGoodsApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceGoodsApplication.class);
        }
    }
    
    步骤3:编写SwaggerConfig文件
    @EnableSwagger2
    @Configuration
    //Profile是方法1(只在dev和test环境下开启)
    @Profile({"dev","test"})
    public class SwaggerConfig implements WebMvcConfigurer {
        //是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
        //这个是方法2哦,使用的话在new Docket里添加.Enable方法将参数放入即可
        @Value(value = "${swagger.show}")
        private Boolean swaggerEnabled;
    
        /**
        * apiInfo() 增加API相关信息
        * 所有的注解
        * .apis(RequestHandlerSelectors.any()) 
        * 指定部分注解1.Api.class(@APi),2.ApiOperation.class(@ApiOperation),3.ApiImplicitParam.class(@ApiImplicitParam)
        *.apis(RequestHandlerSelectors.withMethodAnnotation(Api.class))
        * 指定包路径
        * .apis(RequestHandlerSelectors.basePackage("这里填写需要的路径"))
        * .paths() 这个是包路径下的路径,PathSelectors.any()是包下所有路径
        */
        @Bean
        public Docket createRestApi() {
            log.info(""+swaggerEnabled);
            return new Docket(DocumentationType.SWAGGER_2)
                    .useDefaultResponseMessages(false)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.any())
                    .paths(PathSelectors.any())
                    //创建
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("SpringBoot-Swagger2集成")
                    .description("springboot | swagger")
                    // 作者信息
                    .contact(new Contact("kacen", "https://www.baidu.com", "abc@qq.com"))
                    .version("0.0.1")
                    .build();
        }
    
        //这个是可要可不要的,具体看需求
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    
    }
    

    看到这里有小伙伴在想要指定多包路径,但是又不要整个项目那要怎么办呢,让我带你搞一波,
    点击这里看多包配置哦

    步骤4:

    大功告成啦,请输入http://服务器ip:端口/swagger-ui.html#/看看你的专属文档吧

    提示:

     对于是否暴露swagger,我提供的环境开关配置只是其中之一哦,更多的项目采用的是将页面放到静态页面,再用nginx进行转发后,指定代理环境访问哦。想了解的可以自己试一下哦。

    相关文章

      网友评论

          本文标题:Swagger2使用教程

          本文链接:https://www.haomeiwen.com/subject/jmynektx.html