zoukankan      html  css  js  c++  java
  • Swagger保姆级教学

    Swagger保姆级教学

    Swagger 简介

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

    快速上手

    1.新建一个springboot项目

    2.导入maven依赖(swagger2和swagger UI)

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    

    3.启动项目,访问http://localhost:端口/swagger-ui.html

    4.新建一个SwaggerConfig.java

    package com.littlepage.config;
    import java.util.ArrayList;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
    	/**
    	 * 配置swagger bean实例
    	 * @return
    	 */
    	@Bean
    	public Docket docket() {
    		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    	}
    	
    	/**
    	 * 配置swagger信息
    	 * @return
    	 */
    	private ApiInfo apiInfo() {
    		return new ApiInfo("steve yu's API document", 
    				"for quick start swagger", "1.0", 
    				"https://www.cnblogs.com/littlepage/", 
    				new Contact("steve yu", "https://www.cnblogs.com/littlepage/", "littlepageprogram@outlook.com"),
    				"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList<>());
    	}
    }
    
    

    启动页面

    5.配置扫描接口(修改Bean)

    @Bean
    public Docket docket() {
    	return new Docket(DocumentationType.SWAGGER_2).
    			apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.littlepage.controller")).build();
    }
    

    6.在环境中进行配置(工程扫描接口开关)

    @Bean
    public Docket docket(Environment environment){
    	Profiles profiles=Profiles.of("dev","test");//假设有dev和test环境变量
    	boolean flag=environment.acceptsProfiles(profiles);
    	return new Docket(DocuemtatuionType.SWAGGER_2).enable(flag);//如果环境配置了,则生效,否则不生效
    }
    

    7.API文档的分组。

    new Docket().group(String s)
    //这个String s可以规定分组
    

    8.单API样例(参考https://www.jianshu.com/p/349e130e40d5)

    #####Controller代码
    @Override
        @ApiOperation(value = "post请求调用示例", notes = "invokePost说明", httpMethod = "POST")
        public FFResponseModel<DemoOutputDto> invokePost(@ApiParam(name="传入对象",value="传入json格式",required=true) @RequestBody @Valid DemoDto input) {
            log.info("/testPost is called. input=" + input.toString());
            return new FFResponseModel(Errcode.SUCCESS_CODE, Errcode.SUCCESS_MSG);
        }
    
    
    #####接口请求入参对象   
    @Data
    @ApiModel(value="演示类",description="请求参数类" )
    public class DemoDto implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @NotNull
        @ApiModelProperty(value = "defaultStr",example="mockStrValue")
        private String strDemo;
    
        @NotNull
        @ApiModelProperty(example="1234343523",required = true)
        private Long longNum;
    
        @NotNull
        @ApiModelProperty(example="111111.111")
        private Double doubleNum;
    
        @NotNull
        @ApiModelProperty(example="2018-12-04T13:46:56.711Z")
        private Date date;
        
    }
    
    #####接口请求出参公共类
    @ApiModel(value="基础返回类",description="基础返回类")
    public class FFResponseModel<T> implements Serializable {
    
        private static final long serialVersionUID = -2215304260629038881L;
        // 状态码
        @ApiModelProperty(example="成功")
        private String code;
        // 业务提示语
        @ApiModelProperty(example="000000")
        private String msg;
        // 数据对象
        private T data;
    
    ...
    }
    
    #####接口请求出参实际数据对象
    @Data
    public class DemoOutputDto {
    
        private String res;
    
        @NotNull
        @ApiModelProperty(value = "defaultOutputStr",example="mockOutputStrValue")
        private String outputStrDemo;
    
        @NotNull
        @ApiModelProperty(example="6666666",required = true)
        private Long outputLongNum;
    
        @NotNull
        @ApiModelProperty(example="88888.888")
        private Double outputDoubleNum;
    
        @NotNull
        @ApiModelProperty(example="2018-12-12T11:11:11.111Z")
        private Date outputDate;
        
    }
    
  • 相关阅读:
    catalina_home与catalina_base
    log4j配置
    lsof
    定时任务-crontab
    access日志配置
    java常识
    mysql事务隔离级别与实现原理
    文件描述符设置
    gpio 預設值
    synchronous interrupt and asynchronous interrupt
  • 原文地址:https://www.cnblogs.com/littlepage/p/11614718.html
Copyright © 2011-2022 走看看