美文网首页
SpringBoot2使用swagger2自动生成接口文档

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

作者: 精致的吴彦祖 | 来源:发表于2019-08-02 19:03 被阅读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

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

    相关文章

      网友评论

          本文标题:SpringBoot2使用swagger2自动生成接口文档

          本文链接:https://www.haomeiwen.com/subject/dqsrdctx.html