文档章节

SpringBoot来自Swagger的Restful文档生成

Mr_Qi
 Mr_Qi
发布于 2017/11/21 14:41
字数 570
阅读 238
收藏 2

背景

  1. 基于SpringBoot的方案普遍要做到前后端分离
  2. 代码即文档
  3. 代码变化太快
  4. 文档经常忘记更改

方案

基于Swagger的方案可以比较简单的基于restful api做出相关文档

效果

点击try it out

可以看到结果如下

那么我们需要做什么呢?

代码

  1. 需要在pom里面引入swagger

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

     

  2.  新建swagger的配置类  
    package com.f6car.base.config;
     
    import com.f6car.base.constant.Constants;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
     
    /**
     * @author qixiaobo
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
     
        @Bean
        public Docket createRestApi() {
            ApiInfo apiInfo = new ApiInfoBuilder()
                    .title("使用Swagger2构建RESTful APIs")
                    .description("客户端与服务端接口文档")
                    .termsOfServiceUrl("http://qixiaobo.site")
                    .contact("qixiaobo")
                    .version("1.0.0")
                    .build();
     
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage(Constants.CONTROLLER_PACKAGE))
                    .paths(PathSelectors.any())
                    .build();
        }
     
    }

    我们仅需要提供基础web包名即可

  3. 超类上增加简单注释【没有也没关系】

    /*
     * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
     * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
     * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
     * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
     * Vestibulum commodo. Ut rhoncus gravida arcu.
     */
     
    package com.f6car.base.controller.base;
     
    import com.f6car.base.common.*;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
     
    import java.io.Serializable;
    import java.util.List;
     
    /**
     * @author qixiaobo
     */
    public abstract class AbstractRestController<V extends Vo, S extends So> {
     
        @Autowired
        private Service<V, S> service;
     
     
        @PostMapping()
        @ApiOperation(value = "新建实体", notes = "")
        public Result add(@RequestBody V vo) {
            service.save(vo);
            return ResultGenerator.genSuccessResult();
        }
     
        @DeleteMapping("/{id}")
        @ApiOperation(value = "删除实体", notes = "")
        public Result delete(@PathVariable Serializable id) {
            service.deleteById(id);
            return ResultGenerator.genSuccessResult();
        }
     
     
        @PutMapping
        @ApiOperation(value = "更新实体", notes = "")
        public Result update(@RequestBody V vo) {
            service.update(vo);
            return ResultGenerator.genSuccessResult();
        }
     
        @GetMapping
        @ApiOperation(value = "获取实体列表", notes = "")
        public Result list(S so) {
            PageHelper.startPage(so.getCurrentPage(), so.getPageSize());
            List<V> list = service.findAll();
            PageInfo pageInfo = new PageInfo(list);
            return ResultGenerator.genSuccessResult(pageInfo);
        }
     
        @GetMapping("/{id}")
        @ApiOperation(value = "获取单个实体", notes = "")
        public Result detail(@PathVariable Serializable id) {
            V vo = service.findById(id);
            return ResultGenerator.genSuccessResult(vo);
        }
     
        @DeleteMapping("/batch")
        @ApiOperation(value = "批量删除实体", notes = "")
        public Result batchDelete(@RequestParam String ids) {
            service.deleteByIds(ids);
            return ResultGenerator.genSuccessResult();
        }
     
        @GetMapping("/batch")
        @ApiOperation(value = "批量获取实体", notes = "")
        public Result batchDetail(@RequestParam String ids) {
            List<V> vos = service.findByIds(ids);
            return ResultGenerator.genSuccessResult(vos);
        }
     
        @PostMapping("/batch")
        @ApiOperation(value = "批量新建实体", notes = "")
        public Result add(@RequestBody List<V> vos) {
            service.save(vos);
            return ResultGenerator.genSuccessResult();
        }
     
    }
  4. webConfig需要增加对html的处理【默认都是spring处理】

    @Configuration
    public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
     
     
        @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/");
        }
    }

     

如上就可以简单的的生成

© 著作权归作者所有

共有 人打赏支持
Mr_Qi

Mr_Qi

粉丝 280
博文 359
码字总数 369228
作品 0
南京
程序员
私信 提问
补习系列-springboot-restful应用

一、目标 了解 Restful 是什么,基本概念及风格; 能使用SpringBoot 实现一套基础的 Restful 风格接口; 利用Swagger 生成清晰的接口文档。 二、Restful 入门 什么是REST 摘自百科的定义:R...

美码师
08/05
0
0
Spring Boot学习笔记

RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装rabbitMQ步骤 多线程 Spring @transactional注解和synchronized同步锁同时使用不...

OSC_fly
07/26
0
0
Spring系列整合Swagger

SpringMvc整合Swagger(spring版本在4.1.8以上,深深的痛) 1.先搭建好springmvc的环境 2.修改pom文件 3.也需要引入jackson的包 4.定义一个swagger的配置类 5.修改springmvc的配置文件,放行一...

z七夜
07/03
0
0
Dubbo 的 Swagger 服务文档 - swagger-dubbo

swagger-dubbo支持dubbo以swagger方式展示文档和rest风格的HTTP模拟测试,主要应用场景有以下几点: 通过dubbo与swagger的集成,提供接口文档的阅读 开发人员可以用它来自测服务接口,也可以...

Sayi
06/07
0
0
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
03/05
7.3K
17

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 自定义你的空间

通过对你的空间进行界面的自定义能够让你的空间更加出类拔萃。 如果你具有空间管理员权限,你可以修改你空间的颜色配色,添加你自己的空间标识,选择是否在你空间中显示边栏。或者你可以进入...

honeymose
18分钟前
0
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部