Swagger配置及使用

Swagger

简介

 **号称世界上最流行的Api框架**
 **RestFul Api文档在线自动生成工具=>Api文档与API定义同步更新**
 **直接运行,可以在线测试API接口**    
  **支持多种语言**

官网:https://swagger.io/

在项目中使用Swagger
1.新建一个SpringBoot = web项目
2.导入相关依赖

<!-- 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.编写一个hello工程
4.配置Swagger ==> config

@Configuration
@EnableSwagger2
public class SwaggerConfig {
}

5.测试运行:http://localhost:8080/swagger-ui.html

配置Swagger

public class SwaggerConfig {
    
    //配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
    //配置Swagger信息
    private ApiInfo apiInfo(){
        Contact DEFAULT_CONTACT = new Contact("PeterWang", "", "371991373@qq.com");
        return  new ApiInfo(
                "Api Documentation", 
                "Api Documentation", 
                "1.0", 
                "urn:tos", 
                DEFAULT_CONTACT, 
                "Apache 2.0", 
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

Swagger配置扫描接口

Docket.select()

//配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage:指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //withClassAnnotation: 扫描类上的注解, 参数是一个注解的反射对象
                //withMethodAnnotation  扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com"))
                //paths() 过滤什么路径
                .paths(PathSelectors.ant("/kuang/**"))
                .build();
    }

配置是否启动Swagger

 //配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //enable是否启动Swagger,false,则Swagger不能再浏览器中访问
                .enable(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))
                //paths() 过滤什么路径
                .paths(PathSelectors.ant("/kuang/**"))
                .build();
    }

只希望Swagger在生产环境中使用,在发布的时候不使用

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

        //设置要显示的Swagger环境
        Profiles profiles = Profiles.of("dev");
        //通过environment.acceptsProfiles判断是否处在自己设定的环境中
        boolean flag = environment.acceptsProfiles(profiles);
        
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(false)//enable是否启动Swagger,false,则Swagger不能再浏览器中访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))
                //paths() 过滤什么路径
                .paths(PathSelectors.ant("/kuang/**"))
                .build();
    }

配置Swagger分组

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

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

实体类配置

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

    @ApiModelProperty("用户id")
    private int id;
    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("用户密码")
    private String password;
}

Controller

@Controller
public class ShiroController {

    @GetMapping({"/","/index"})
    public String toindex(Model model){
        model.addAttribute("msg","hello,shiro");
        return "index";
    }

    @ApiOperation("get测试类") //Operation接口,不是放在类上,是方法上
    @GetMapping("/user/add")
    public String toAdd(Model model){
        model.addAttribute("msg","hello,shiro");
        return "user/add";
    }

    //只要我们的接口中,返回值中存在实体类,它就会被扫描到Swagger中
    @PostMapping("/user")
    public User user(){
        return new User();
    }
}

总结

1.可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2.接口文档事实跟新
3.可以在线测试
注意:在正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行的内存。
本博客来源视频: https://space.bilibili.com/95256449/channel/detail?cid=146244

上一篇:SpringBoot --- Swagger


下一篇:JAVA学习笔记——Set集合及其子类