原创

springboot集成swagger

springboot集成swagger

1、为什么需要swagger

  • 开发人员频繁的修改服务端的rest接口,而对接人员和测试人员未能在第一时间获取到最新的文档
  • 接口编写完成,需要再花一定的时间去按照模板编写接口文档费事费力,不如编写代码来的轻松
  • 如果你也有同感,那么swagger绝对是你的救星

2、swagger是什么

  • swagger是一个基于注解生成在线api文档的工具包。有了它编写好代码,接口的入参、出参、方法定义上打上指定的注解,辅以描述,那么框架会根据规范生成格式规范的api在线文档,与代码自动保持同步,所见即所得。
  • 一个在线的postman,大部分参数为你格式化好了,你只需把形参替换成实参就可以发送请求了
  • 支持导出markdown、pdf、word等第三方格式的文档
  • 自动标识最新的api,改动一目了然

3、如何集成

a、引入pom

 <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.8.7</version>
        </dependency>
  • 需要说明的是这里采用的是第三方的swagger-ui,相较于官网的版本,界面更优美,体验更好。ui只是一个插件,可以无缝替换

b、代码上增加注解

入参
@Data
@ApiModel("创建流程文档")
public class AddDocModel extends ToString {
    @ApiModelProperty("文档的名称")
    @NotBlank(message = "name不能为空")
    private String name;

    @ApiModelProperty("文件的fileKey")
    @NotBlank(message = "fileKey不能为空")
    private String fileKey;

    @ApiModelProperty("文件id")
    @NotBlank(message = "fileId不能为空")
    private String fileId;

    @ApiModelProperty("是否加密")
    private Integer encryption;
}

出参
@ApiModel("创建文档的结果集")
@Data
public class AddDocResult extends BaseResult {
    @ApiModelProperty("文档id")
    private String docId;
}

方法
@Api(tags = "文档管理", description = "文档管理")
public class DocServiceImpl implements DocService {
 @ApiOperation(value = "创建文档", httpMethod = "POST")
    public AddDocResult addDoc(@RequestBody AddDocModel addDocModel) {
        //接口实现
    }
}
  • 重要注解说明

    ApiModel 用来定义接口的出参和入参的实体类

    ApiModelProperty 定义实体类的属性值

    Api 用来定义api功能模块

    ApiOperation 定义一个具体的api

    httpMethod = "POST" 接口只生成POST请求的文档

    @RequestBody 入参采用json

c、配置swagger

@Configuration
@EnableSwagger2
public class SwaggerConfiguration extends WebMvcConfigurerAdapter {
    private final String SWAGGER_SCAN_BASE_PACKAGE = "top.zhuofan.datafly";

    /**
     * 项目里的静态资源路径指向如下
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()
                .title("卓帆网")
                .description("datafly online doc")
                .termsOfServiceUrl("https://www.chenzhuofan.top/")
                .contact(new Contact("", "", "308679291@qq.com"))
                .version("1.0")
                .build();
    }
}
  • 配置的主要内容是

    • 将swagger-ui的静态页相关的资源添加到springboot可访问的路径下
    • 添加swagger的扫描包路径
    • 添加swagger的版权、开发人员的联系信息

4、效果展示

5、后续

更多精彩,敬请关注, 程序员导航网 https://chenzhuofan.top

正文到此结束