java

SpringBoot集成Swagger

rzk · 5月30日 · 2020年本文共3865个字 · 预计阅读13分钟110次已读

学习视频

新建一个SpringBoot

###导入相关依赖

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

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

###编写一个hello工程

##配置Swagger => Config

在config > SwaggerConfig
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {

}

###测试

访问:localhost:8080/swagger-ui.html

SpringBoot集成Swagger

##界面可以改

需要通过ApiInfo.DEFAULT里面的静态方法;
SpringBoot集成Swagger

@Configuration
@EnableSwagger2  //开启Swagger2
public class SwaggerConfig {

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

    //配置Swagger 信息 = apiInfo
    private ApiInfo apiInfo(){
        Contact contact = new Contact("rrr", "http://www.r.com/", "1760@qq.com");

        return new ApiInfo(
                "Rzk睿共享的SwaggerAPI文档",
                "书山有路勤为径,学海无涯苦作舟",
                "1.0",
                "http://www.r.com/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}


###访问
localhost:8080/swagger-ui.html
SpringBoot集成Swagger

##扫描接口

@Configuration
@EnableSwagger2  //开启Swagger2
public class SwaggerConfig {

    //配置了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.rzk.swagger.controller"))
                .paths(PathSelectors.ant("/rzk/**"))
                .build()
                ;
    }

    //配置Swagger 信息 = apiInfo
    private ApiInfo apiInfo(){
        Contact contact = new Contact("楷哥", "http://www.ruizhukai.com/", "1769073060@qq.com");

        return new ApiInfo(
                "Rzk的SwaggerAPI文档",
                "书山有路勤为径,学海无涯苦作舟",
                "1.0",
                "http://www.ruizhukai.com/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

如果加上 enable(false) 页面就访问不了
是否启动swagger 如果false就不能访问

###希望在Swagger在生产环境中使用,在发布的使用不使用?

  • 判断是不是生产环境
  • 注入enable()

####新建三个配置类

内容如下:
SpringBoot集成Swagger

####SwaggerConfig配置类

@Configuration
@EnableSwagger2  //开启Swagger2
public class SwaggerConfig {

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

        //设置要显示的Swagger环境
        Profiles profiles= Profiles.of("dev");
        //通过environment.acceptsProfiles 判断是否处在自己设定的环境当中   获取项目的环境
        boolean flag = en睿共享vironment.acceptsProfiles(profiles);


        return new Docket(DocumentationType.SWAGGER_2)

                .enable(flag)
                .select()

                //RequestHandlerSelectors,配置要烧苗接口的方式
                //basePackage;指定要扫描的包
                //any(睿共享):扫描全部
                //none():不扫描
                //withClassAnnotation():扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnotation():扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.rzk.swagger.controller"))
                .paths(PathSelectors.ant("/rzk/**"))
                .build()
                ;
    }
}

启动项目,访问8082端口
SpringBoot集成Swagger

##配置多个API文档的 分组

.groupName(“文档一”)

SpringBoot集成Swagger

###配置多个

 @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("文档二")
                ;
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("文档三")
                ;
    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("文档四")
                ;
    }
    @Bean
睿共享    public Docket docket4(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("文档五")
                ;
    }

SpringBoot集成Swagger

##如果controller返回实体类,会被扫描到Swagger里面

    //只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;
    private String perms;
}

查看
SpringBoot集成Swagger

###在实体类加上api文档注释

给实体类加注释 @ApiModel
字段上加注释 @ApiModelProperty
给方法加上注释,而不是类上:@ApiOperation(“user控制类”)

@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户Id")
    private int id;
    @ApiModelProperty("用户名")
    private String name;
    @ApiModelProperty("用户密码")
    private String pwd;
    @ApiModelProperty("用户权限")
    private String perms;
}

####查看

SpringBoot集成Swagger

###在Swagger上测试

    //只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger
    @ApiOperation("user控制类")
    @PostMapping(value = "/user")
    public User user(@ApiParam("用户") User user){
        return new User();
    }

找到Post的/user进行测试

SpringBoot集成Swagger

SpringBoot集成Swagger

如果有错误,会很清楚的标记出错误

##总结
1.可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2.接口文档实时更新
3.可以在线测试

0 条回应