• Swagger Demo


    最近项目中用了Swagger就研究了一下,顺便记录了下来,不过个人感觉这个东西虽然方便调试接口了,但对代码的污染太严重了

    1.导入依赖(这里是使用maven的方式)

            <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. 创建Swagger配置类(我这里是做了分组的)和业务枚举类

    package com.example.demo.config;
    
    import com.example.demo.constant.BusinessExplantEnum;
    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.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    /**
     * Swagger 配置类
     */
    @Configuration
    @EnableSwagger2
    public class Swagger2Config {
    
        @Bean
        public Docket groupName1(){
            return getDocket(BusinessExplantEnum.GROUP_1.getGroupName(), BusinessExplantEnum.GROUP_1.getGroupContent(), "Title_1");
        }
    
        @Bean
        public Docket groupName2(){
            return getDocket(BusinessExplantEnum.GROUP_2.getGroupName(), BusinessExplantEnum.GROUP_2.getGroupContent(), "Title_2");
        }
    
        public Docket getDocket(String groupName, String path, String apiName){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo(apiName))
                    .groupName(groupName)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller." + path))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo(String title){
            return new ApiInfoBuilder()
                    .title(title)
                    .version("1.0")
                    .build();
        }
    }

    业务枚举类(不是必须的,具体看自己的业务需求)

    package com.example.demo.constant;
    
    /**
     * 业务枚举类
     */
    public enum BusinessExplantEnum {
    
        GROUP_1("分组1", "demo1"),
    
        GROUP_2("分组2", "demo2");
    
        private String groupName;
    
        private String groupContent;
    
        BusinessExplantEnum(String groupName, String groupContent){
            this.groupName = groupName;
            this.groupContent = groupContent;
        }
    
        public String getGroupName() {
            return groupName;
        }
    
        public void setGroupName(String groupName) {
            this.groupName = groupName;
        }
    
        public String getGroupContent() {
            return groupContent;
        }
    
        public void setGroupContent(String groupContent) {
            this.groupContent = groupContent;
        }
    
    }

    3.创建参数实体类

    package com.example.demo.model;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    
    /**
     * 参数实体类
     */
    @ApiModel(value = "DemoParamDTO", description = "参数实体类")
    public class DemoParamDTO {
    
        @ApiModelProperty(value = "用户ID")
        private String id;
    
        @ApiModelProperty(value = "用户名称")
        private String name;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    4.创建Controller类(这里就写一个,另一个内容一样)

    package com.example.demo.controller.demo1;
    
    import com.example.demo.common.ResponseResult;
    import com.example.demo.model.DemoParamDTO;
    import com.example.demo.model.ResponseVO;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.http.MediaType;
    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;
    
    @Api(tags = "测试swagger功能1")
    @RestController
    @RequestMapping(value = "/controller1", produces = MediaType.APPLICATION_JSON_VALUE)
    public class DemoController {
    
        @ApiOperation(value = "swagger方法")
        @PostMapping(value = "/testMethod")
        public ResponseResult<ResponseVO> testMethod(@ApiParam(required = true, name = "paramDTO", value = "接口入参")@RequestBody DemoParamDTO paramDTO){
            System.out.println("id:" + paramDTO.getId());
            System.out.println("name:" + paramDTO.getName());
            return ResponseResult.success(new ResponseVO());
        }
    
    }

    5.启动Application服务

    package com.example.demo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplicationpublic class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }

    下图是项目目录结构

    然后输入浏览器输入http://localhost:8080/swagger-ui.html就可以看到效果了

     

  • 相关阅读:
    jquery+ajax+ashx。ashx的使用方法
    如何在ashx页面获取Session值
    模式DIV。
    .net 中文传参
    5分钟无操作,退出,操作方法,关闭页面
    SQL Server DATEDIFF() 函数(SQL计算时间差)
    Sql server 事务的两种用法
    正则表达式相关
    jQuery AJAX实现调用页面后台方法。调用ashx方法
    时间差(类.精确到秒).net中实现Datediff类C#
  • 原文地址:https://www.cnblogs.com/jadening/p/14100649.html
Copyright © 2020-2023  润新知