zoukankan      html  css  js  c++  java
  • Swagger2:自动生成API接口文档

    Swagger2:自动生成API接口文档

    有个项目需要用到Swagger2来做前后端对接,查了下文档发现挺好用的,记录一下

    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>
    

    配置类

    @Configuration
    @EnableSwagger2
    public class Swagger2Conf {
        @Bean
        public Docket getUserDocket(){
            ApiInfo apiInfo=new ApiInfoBuilder()
                    .title("Swagger2演示")//api标题
                    .description("API文档")//api描述
                    .version("1.0.0")//版本号
                    .contact("cyz")//本API负责人的联系信息
                    .build();
            return new Docket(DocumentationType.SWAGGER_2)//文档类型(swagger2)
                    .apiInfo(apiInfo)//设置包含在json ResourceListing响应中的api元信息
                    .select()//启动用于api选择的构建器
                    .apis(RequestHandlerSelectors.basePackage("com.cpaulyz.controller"))//扫描接口的包
                    .paths(PathSelectors.any())//路径过滤器(扫描所有路径)
                    .build();
        }
    }
    

    常用注解

    注解 使用的地方 用途
    @Api 类/接口 描述类/接口主要用途
    @ApiOperation 方法 描述方法的用途
    @ApiImplicitParam 方法 用于描述接口的非对象参数
    @ApiImplicitParams 方法 用于描述接口的非对象参数集
    @ApiIgnore 类/方法/参数 Swagger 文档不会显示拥有该注解的接口
    @ApiModel 参数实体类 可设置接口相关实体的描述
    @ApiModelProperty 参数实体类属性 可设置实体属性的相关描述
    @ApiResponses 方法返回值 用于描述接口的方法返回值
    @ApiResponse 方法返回值 用于描述接口的方法返回值集

    @ApiImplicitParams、@ApiImplicitParam:方法参数的说明

    @ApiImplicitParams:用在请求的方法上,包含一组参数说明
        @ApiImplicitParam:对单个参数的说明      
            name:参数名
            value:参数的汉字说明、解释
            required:参数是否必须传
            paramType:参数放在哪个地方
                · header --> 请求参数的获取:@RequestHeader
                · query --> 请求参数的获取:@RequestParam
                · path(用于restful接口)--> 请求参数的获取:@PathVariable
                · body(请求体)-->  @RequestBody User user
                · form(普通表单提交)     
            dataType:参数类型,默认String,其它值dataType="int"       
            defaultValue:参数的默认值
    

    单个参数举例

    @ApiOperation("根据部门Id删除")
    @ApiImplicitParam(name="depId",value="部门id",required=true,paramType="query")
    @GetMapping("/delete")
    public AjaxResult delete(String depId) {
        //TODO
    }
    

    @ApiResponses、@ApiResponse:方法返回值的说明

    @ApiResponses:方法返回对象的说明
        @ApiResponse:每个参数的说明
            code:数字,例如400
            message:信息,例如"请求参数没填好"
            response:抛出异常的类
    

    示例

    配置实体类

    @ApiModel("部门实体类")
    @Data
    @NoArgsConstructor
    @Accessors(chain = true)
    public class Dept implements Serializable {
        @ApiModelProperty("ID")
        private int dNo;
        @ApiModelProperty("部门名称")
        private String dName;
        // 这个服务在哪个数据库的字段
        @ApiModelProperty("所属数据库")
        private String dbSource;
    }
    

    配置接口类

    @Api(tags = "部门管理api")
    @RestController
    @RequestMapping("/dept")
    public class DeptController {
    
        @Autowired
        DeptService deptService;
    
        @ApiOperation("添加部门")
        @PostMapping("/add")
        public boolean addDept(Dept dept){
            return deptService.addDept(dept);
        }
    
        @ApiOperation(value = "根据ID获取部门",notes = "我是notes")
        @ApiImplicitParams(
                @ApiImplicitParam(name = "id",value = "部门id",required = true)
        )
        @GetMapping("/get/{id}")
        public Dept get(@PathVariable("id") int id){
            return deptService.queryById(id);
        }
    
        @ApiOperation("获取全部部门")
        @PostMapping("/getAll")
        public List<Dept> getAll(){
            return deptService.queryAll();
        }
    
    
        @Autowired
        DiscoveryClient client;
    
        @ApiIgnore()
        @GetMapping("/discovery")
        public Object discovery(){
            // 获取微服务列表的清单
            List<String> services = client.getServices();
            System.out.println("discovery=>services:" + services);
            // 得到一个具体的微服务信息,通过具体的微服务id,applicaioinName;
            List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
            for (ServiceInstance instance : instances) {
                System.out.println(
                        instance.getHost() + "	" + // 主机名称
                                instance.getPort() + "	" + // 端口号
                                instance.getUri() + "	" + // uri
                                instance.getServiceId() // 服务id
                );
            }
            return this.client;
        }
    }
    

    访问UI

    http://localhost:xxxx/swagger-ui.html

    image-20210204145910901

    在webUI上也可以发送请求进行测试,挺好用的

    导入postman

    import->import from link

    image-20210204150129827

    之后就可以方便调试了

    image-20210204150154522

  • 相关阅读:
    安装CentOS7
    gitlab的CI/CD实现
    如何实现7*24小时灵活发布?阿里技术团队这么做
    架构整洁之道, 看这一篇就够了!
    什么是数据湖?有什么用?
    2020 云原生 7 大趋势预测
    饿了么交易系统 5 年演化史
    ajax 传参数 数组 会加上中括号
    文件下载
    数组常用方法
  • 原文地址:https://www.cnblogs.com/cpaulyz/p/14372672.html
Copyright © 2011-2022 走看看