目录

 

Swagger简介

1、大背景

2、集成Swagger

3、配置Swagger

Swagger 配置扫描接口

配置是否启动Swagger

配置API文档的分组

实体类配置:

Controller 类配置


Swagger简介

前后端分离:Vue+SpringBoot

1、大背景

后端时代:

前端只用管理静态页面;html==>后端。模板引擎JSP=>后端是主力

前后端分离式时代:

  • 后端:后端控制层、服务层、数据访问层【后端团队】
  • 前端:前端控制层、视图层【前端团队】

伪造后端数据,json 已经存在了,不需要后端,前端工程依旧能跑起来

  • 前后端如何交互?==》API
  • 前后端相对独立,松耦合;
  • 前后端甚至可以部署在不同的服务器上;

产生一个问题:

  • 前后端集成联调,前端人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;

解决方案:

  •  指定schema【计划的提纲】,实时更新最新API,降低集成的风险。
  • 制定word计划文档;
  • 前后端分离:

前端测试后端接口:postman

后端提供接口,需要实时更新最新的消息及改动;

 

2、集成Swagger

  • 最流行的API框架
  • RestFul Api文档在线自动生成工具==》Api文档与API 定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言:(java、PHP...)

3、SpringBoot集成Swagger

1) 新建一个SpringBoot web项目

2)导入相关依赖

<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>

3)编写一个HelloController

@RestController
public class HelloController {

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hello(){
        return "hello";
    }

}

4) 配置 Swagger

@Configuration
@EnableSwagger2
public class SwaggerConfig {

}

 5)启动项目 访问http://localhost:8080/swagger-ui.html

3、配置Swagger

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    //配置 Swagger的Docket 的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    //配置swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("珂瑞", "https://blog.csdn.net/xaccpJ2EE", "93643786@qq.com");
        return new ApiInfo("Swagger 学习 API",
                "不经历风雨怎能见彩虹",
                "v1.0",
                "https://blog.csdn.net/xaccpJ2EE",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<VendorExtension>());
    }
}

访问:

Swagger 配置扫描接口

Docket.select()

//配置 Swagger的Docket 的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors 配置要扫描接口的方式
                //basePackage 指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //.RequestHandlerSelectors.withClassAnnotation(RestController.class) 扫描类上的注解,参数是一个注解的反射对象;实例为只扫描有注解RestController的类
                //RequestHandlerSelectors.withMethodAnnotation(GetMapping.class) 扫描方法上的注解,实例为 只扫描有GetMapping 注解的方法
                .apis(RequestHandlerSelectors.basePackage("com.man"))

                //paths() 过滤什么路径
                .paths(PathSelectors.ant("/"))
                .build();
    }

配置是否启动Swagger

//配置 Swagger的Docket 的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
                .enable(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.man"))
                //.paths(PathSelectors.ant("/"))
                .build();
    }

 配置生产环境不启用Swagger

 //配置 Swagger的Docket 的bean实例
    @Bean
    public Docket docket(Environment environment){

        //设置要显示的swagger环境
        Profiles profiles=Profiles.of("dev","test");
        //通过environment.acceptsProfiles 判断是否处在自己设定的环境当中
        boolean flag=environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
                .enable(flag)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.man"))
                //.paths(PathSelectors.ant("/"))
                .build();
    }

配置API文档的分组

//配置分组
.groupName("珂瑞")

//配置 Swagger的Docket 的bean实例
    @Bean
    public Docket docket(Environment environment){

        //设置要显示的swagger环境
        Profiles profiles=Profiles.of("dev","test");
        //通过environment.acceptsProfiles 判断是否处在自己设定的环境当中
        boolean flag=environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //配置分组
                .groupName("珂瑞")
                //设置是否开启Swagger,如果为Flase 则swagger 不能在浏览器中访问
                .enable(flag)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.man"))
                //.paths(PathSelectors.ant("/"))
                .build();
    }

页面显示

如何设置多个分组

多增加几个Docket 方法

@Bean
    public Docket docketA(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }

    @Bean
    public Docket docketB(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }

    @Bean
    public Docket docketC(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

实体类配置:


@ApiModel("用户实体类")
public class User {

    @ApiModelProperty("用户名")
    private String username;

    @ApiModelProperty("密码")
    private String password;

}

Controller 类配置

@RestController
@RequestMapping("/test")
@Api(value = "测试",tags = "测试")
public class HelloController {

    @GetMapping(value = "/hello")
    @ApiOperation(value = "hello", notes = "无参传入")
    public String hello(){
        return "hello";
    }

    @PostMapping("/userInfo")
    @ApiOperation(value = "用户", notes = "返回单个用户信息")
    public User userinfo(){
        return new User();
    }

    @PostMapping(value = "/hello2")
    @ApiOperation(value = "hello2", notes = "返回用户名")
    public String hello2(@ApiParam(name="用户名",required = true) String username){
        return "hello "+ username;
    }

}

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐