SpringBoot2使用swagger2自动生成接口文档

2019-08-02  本文已影响0人  精致的吴彦祖

随着技术的不断发展,现在开发的模式大部分都是前后端分离,为了跟前端同事沟通方便,大部分写后端的朋友都要写接口文档,写接口文档确实减少了跟前端同事很多不必要的沟通,但是这样就真的没有一点缺点了吗?

当接口稍微改动就得马上更新文档,然后得马上给前端发一份,这样有时候就会造成文档更新交流不及时,前端接收的文档就会多,不好管理。

就算文档更新及时了、前端也整理好了文档,也不能直接在线测试接口,通常都需要第三方插件来测试,例如postman。

但是今天我给大家介绍的swagger2就不需要,它不仅能自动生成接口文档,还能在线测试接口是否正常!

废话不多说,咱们直接进入主题,今天我们就用springboot2来整合swagger2,直接带你们应用起来。

先说一下我使用的架构和版本信息,springboot版本为2.1.6,swagger的版本为2.8,数据底层使用的是mybatis,mybatis的版本为1.3.2。

第一步:导入依赖

<!-- 导入swagger2的包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>

第二步:配置Swagger类

/**
 * 整合swagger2
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    /**
     * 设置一个开关,生产版本为false,关闭swagger
     */
    @Value("${swagger.ebable}")
    private boolean ebable;

    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).
                enable(ebable).select().apis(RequestHandlerSelectors.basePackage("com.demo.controller")). //扫描包
                paths(PathSelectors.any()).build();
        //可以设置为扫描多个包
        /**
         * com.google.common.base.Predicate<RequestHandler> selector1 = RequestHandlerSelectors.basePackage("设置你要扫描的包路径");
         * com.google.common.base.Predicate<RequestHandler> selector2 = RequestHandlerSelectors.basePackage("设置你要扫描的包路径");
         * createRestApi这样写即可。
         * @Bean
         *     public Docket createRestApi(){
         *         return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).
         *         enable(ebable).select().
         *         apis(Predicates.or(selector1,selector2)).
         *         paths(PathSelectors.any()).build();
         *     }
         */
    }


    @SuppressWarnings("deprecation")
    public ApiInfo apiInfo(){
        return new ApiInfoBuilder().title("接口文档").
            description("服务端通用接口").version("1.0").build();
    }

    /**
     * 一定要写这个方法,不然访问swagger-ui.html页面会404
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").
          addResourceLocations("classpath:/META-INF/resources/").
          setCachePeriod(0);
    }

}

SwaggerConfig类上有一个ebable属性,我们可以在yml文件上定义一下,当我们要上生产环境时,把这个ebable属性为false,swagger就关闭了。

swagger: ##给swagger设置一个开关
  ebable: true

配置好了,咱们来写一个controller。

@RestController
@Api(description = "关于用户接口",value = "用户接口",tags = {"用户接口"})  //使用@Api来修饰类
public class UserController {

    @Autowired
    private UserService userService;


    @GetMapping("/getUser/{userId}")    //使用RestFul风格
    //使用@ApiOperation注解来修饰接口
    @ApiOperation(value = "通过用户Id来获取用户信息",notes = "RestFul风格,需要传用户Id")
    //使用ApiImplcitParam修饰接口参数
    @ApiImplicitParam(name = "userId",value = "用户Id",required = true)
    public User getUserById(@PathVariable("userId") Integer userId){
        return userService.selectById(userId);
    }
}

依赖也导入了,配置也配好了,接口也写好了,咱们来启动一下这个程序吧。



启动成功后,直接访问localhost:8080/swagger-ui.html,就能看到swagger为咱们生成的接口文档了。

springboot2+swagger2的整合就到此结束了。但是swagger2还有一些注解没给大家介绍,因为swagger2是通过各种注解来生成接口文档的,下面就给大家介绍介绍swagger2的注解。

@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数

整篇文章就到此结束,如果大家在整合的过程中还有什么问题可以留言给我,我也把我自己整合的源码放到github上,大家可以点击阅读原文来clone,下方也留了github的链接,也别忘记给我star哦。

github仓库链接:https://github.com/wuyanzu01/springboot2swagger2

请关注微信公众号:请快点喜欢我

上一篇下一篇

猜你喜欢

热点阅读