乐趣区

springboot2x集成swagger

集成 swagger

pom 包配置

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>${swagger.version}</version>
</dependency>

添加 Swagger 配置文件

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    /**
     * 创建一个 Docket 对象
     * 调用 select()方法,* 生成 ApiSelectorBuilder 对象实例,该对象负责定义外漏的 API 入口
     * 通过使用 RequestHandlerSelectors 和 PathSelectors 来提供 Predicate,在此我们使用 any()方法,将所有 API 都通过 Swagger 进行文档管理
     * @return
     */
    @Bean
    public Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();}

    private ApiInfo apiInfo() {return new ApiInfoBuilder()
                // 标题
                .title("Spring Boot 中使用 Swagger2 构建 RESTful APIs")
                // 简介
                .description("")
                // 服务条款
                .termsOfServiceUrl("")
                // 作者个人信息
                .contact(new Contact("chenguoyu","","chenguoyu_sir@163.com"))
                // 版本
                .version("1.0")
                .build();}
}

如果不想将所有的接口都通过 swagger 管理的话,可以将 RequestHandlerSelectors.any() 修改为RequestHandlerSelectors.basePackage()

配置静态访问资源

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决 swagger-ui.html 404 报错
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
    }
}

到这里为止 swagger 就已经配置完了,可以启动项目,然后访问如下链接即可 http://localhost:9000/swagger…

端口号 applicationContext 中设置的端口号。

页面如下

集成 swagger-bootstrap-ui

由于个人感觉原生的 swagger-ui 不太好看,网上提供了 swagger-bootstrap-ui。

pom 依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.3</version>
</dependency>

配置静态访问资源

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决 swagger-ui.html 404 报错
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        // 解决 doc.html 404 报错
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");

    }
}

这时只需要访问以下链接即可 http://localhost:9000/doc.html

swagger 常用注解

  1. @Api:用在类上,标志此类是 Swagger 资源

    属性名称 备注
    value 该参数没什么意义,在 UI 界面上不显示,所以不用配置
    tags 说明该类的作用,参数是个数组,可以填多个
    description 对 api 资源的描述
  2. @ApiOperation:用在方法上,描述方法的作用

    属性名称 备注
    value 方法的用途和作用
    tags 方法的标签,可以设置多个值
    notes 方法的注意事项和备注
    response 返回的类型(尽量不写,由 swagger 扫描生成)
  3. @ApiImplicitParams:包装器:包含多个 ApiImplicitParam 对象列表

    属性名称 备注
    value 多个 ApiImplicitParam 配置
  4. @ApiParam:用于 Controller 中方法的参数说明

    属性名称 备注
    name 属性名称
    value 属性值
    defaultValue 默认属性值
    allowableValues 可以不配置
    required 是否属性必填
    allowMultiple 文件上传时,是否允许多文件上传
  5. @ApiImplicitParam:定义在 @ApiImplicitParams 注解中,定义单个参数详细信息,如果只有一个参数,也可以定义在方法上

    属性名称 备注
    name 参数名
    value 参数说明
    dataType 参数类型
    paramType 表示参数放在哪里
    header : 请求参数的获取:@RequestHeader
    query : 请求参数的获取:@RequestParam
    path : 请求参数的获取:@PathVariable
    body : 不常用
    form : 不常用
    defaultValue 参数的默认值
    required 参数是否必须传
  6. @ApiModel:用在类上,表示对类进行说明,用于实体类中的参数接收说明

    属性名称 备注
    value 默认为类的名称
    description 对该类的描述
  7. @ApiModelProperty:在 model 类的属性添加属性说明

    属性名称 备注
    value 属性描述
    name 属性名称
    allowableValues 参数允许的值
    dataType 数据类型
    required 是否必填
  8. @ApiResponses:包装器:包含多个 ApiResponse 对象列表

    属性名称 备注
    value 多个 ApiResponse 配置
  9. @ApiResponse:定义在 @ApiResponses 注解中,一般用于描述一个错误的响应信息

    属性名称 备注
    code 响应码
    message 状态码对应的响应信息
    response 默认响应类 Void
    responseContainer 参考 ApiOperation 中配置
  10. @ApiIgnore():用于类或者方法上,不被显示在页面上

总结

除上面之外有点值得注意的是,如果是上传文件的话,需要把 @ApiImplicitParam 中的 dataType 属性配置为 __File 否则在 swagger 中会显示为文本框而不是上传按钮

如果需要项目代码,可以去我的 github 中下载;具体代码可以查看 swagger 目录

退出移动版