Springboot 集成Swagger 学习

    科技2025-05-04  42

    目录

     

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

     

    Processed: 0.010, SQL: 8