当前位置: 首页 > news >正文

spring cloud 学习(10) - 利用springfox集成swagger

对绝大多数程序员而言,写接口文档是一件痛苦的事情,相对文档,他们更愿意写代码。最理想的情况就是:代码即文档!服务开发完成后,部署上去文档就自动生成,没错,这就是springfox + swagger要解决的问题!

swagger号称 THE WORLD'S MOST POPULAR API TOOLING。但swagger默认情况下,仍要单独部署,程序员还是要跑到一个单独的web页面上编辑,写一堆yaml文档,依然不爽。

github上有一个springfox项目,可以在开发rest服务时,只要加一些注解,就自动生成swagger-ui界面,以及相关的文档,而且可以跟spring-boot/spring-cloud无缝集成。

步骤:

一、添加依赖项

    dependencies {
        ...
        compile "io.springfox:springfox-swagger2:2.7.0"
        compile "io.springfox:springfox-swagger-ui:2.7.0"
        ...
    }

  

二、添加swagger配置类

 1 package cn.mwee.order.cloud.service.express.config;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 6 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 7 import springfox.documentation.builders.ApiInfoBuilder;
 8 import springfox.documentation.builders.PathSelectors;
 9 import springfox.documentation.builders.RequestHandlerSelectors;
10 import springfox.documentation.service.ApiInfo;
11 import springfox.documentation.service.Contact;
12 import springfox.documentation.spi.DocumentationType;
13 import springfox.documentation.spring.web.plugins.Docket;
14 import springfox.documentation.swagger2.annotations.EnableSwagger2;
15 
16 /**
17  * Created by yangjunming on 13/10/2017.
18  */
19 @Configuration
20 @EnableSwagger2
21 public class SwaggerConfig {
22 
23     @Bean
24     public Docket createRestApi() {
25         return new Docket(DocumentationType.SWAGGER_2)
26                 .apiInfo(apiInfo())
27                 .select()
28                 .apis(RequestHandlerSelectors.basePackage("xxx.controller")) //Controller所在的package
29                 .paths(PathSelectors.any())
30                 .build();
31     }
32 
33     @Bean
34     public WebMvcConfigurerAdapter addResourceHandlers() {
35         return new WebMvcConfigurerAdapter() {
36             @Override
37             public void addResourceHandlers(ResourceHandlerRegistry registry) {
38                 registry.addResourceHandler("swagger-ui.html")
39                         .addResourceLocations("classpath:/META-INF/resources/");
40                 registry.addResourceHandler("/webjars/**")
41                         .addResourceLocations("classpath:/META-INF/resources/webjars/");
42             }
43         };
44     }
45 
46     private ApiInfo apiInfo() {
47         return new ApiInfoBuilder()
48                 .title("express-service online api document")
49                 .description("某某服务") 
50                 .contact(new Contact("作者名字", "http://作者介绍网址", "作者@邮箱.com"))
51                 .version("1.0.0") //显示版本号
52                 .build();
53     }
54 }
View Code

 

三、在Controller上添加注解

 1 package cn.mwee.order.cloud.service.express.controller;
 2 
 3 import cn.mwee.order.cloud.admin.common.controller.AbstractController;
 4 import cn.mwee.order.cloud.admin.service.dto.common.DataResult;
 5 import cn.mwee.order.cloud.admin.service.dto.express.sf.*;
 6 import cn.mwee.order.cloud.admin.service.express.SFExpressService;
 7 import io.swagger.annotations.Api;
 8 import io.swagger.annotations.ApiOperation;
 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.cloud.context.config.annotation.RefreshScope;
11 import org.springframework.web.bind.annotation.PostMapping;
12 import org.springframework.web.bind.annotation.RequestBody;
13 import org.springframework.web.bind.annotation.RequestMapping;
14 import org.springframework.web.bind.annotation.RestController;
15 
16 import javax.servlet.http.HttpServletRequest;
17 
18 /**
19  * Created by 菩提树下的杨过(http://yjmyzz.cnblogs.com/) on 2017/7/18.
20  */
21 @RestController
22 @RefreshScope
23 @RequestMapping("/sf")
24 @Api(consumes = "application/json",
25         produces = "application/json",
26         protocols = "http",
27         basePath = "/sf", value = "顺丰对接服务")
28 public class SFController extends AbstractController {
29 
30     ...
31 
32     @ApiOperation(value = "下单", tags = "顺丰速运")
33     @PostMapping(value = "submitOrder")
34     public DataResult<SFSubmitResponse> submitOrder(@RequestBody SFSubmitOrderRequest request) throws Exception {
35         return ...;
36     }
37 
38     ...
39 
40 }
View Code

注意上面几处带@Api开头的注解

 

四、参数实体上添加注解

 1 package cn.mwee.order.cloud.admin.service.dto.express.sf;
 2 
 3 import cn.mwee.order.cloud.admin.service.dto.express.ExpressBaseOrder;
 4 import cn.mwee.order.common.utils.date.DateUtil;
 5 import com.alibaba.fastjson.annotation.JSONField;
 6 import io.swagger.annotations.ApiModel;
 7 import io.swagger.annotations.ApiModelProperty;
 8 import lombok.Data;
 9 import lombok.EqualsAndHashCode;
10 
11 import java.util.ArrayList;
12 import java.util.Date;
13 import java.util.List;
14 
15 /**
16  * 顺丰的物流订单
17  * Created by 菩提树下的杨过(http://yjmyzz.cnblogs.com/) on 26/09/2017.
18  */
19 @Data
20 @EqualsAndHashCode(callSuper = false)
21 @ApiModel(description = "顺丰-提交订单参数")
22 public class SFSubmitOrderRequest extends ExpressBaseOrder {
23 
24     @ApiModelProperty(value = "商家编码(顺丰分配提供)", required = true, dataType = "String", example = "A001")
25     private String clientCode; //商家编码,为顺丰分配提供
26 
27     ...
28 }
View Code

还是注意上面几处带@Api开头的注解,一看就懂。

 

启动后,就可以用 http://xxxx.xxxx:port/swagger-ui.html访问了

随便点开一个方法,比如cancelOrder

还可以直接调用REST(相当于postman之类的rest服务测试工具了)

相关文章:

  • java.nio.channels.IllegalBlockingModeException
  • Eclipse在线更新慢
  • 【杂谈】小记一个ios11的bug
  • libgdx游戏引擎教程
  • android用户界面之WebView教程实例汇总
  • [译] 为多个品牌和应用构建 React 组件
  • 高级软件工程第三次结对作业
  • Sequelize 中文文档 v4 - Getting started - 入门
  • crontab命令详解 含启动/重启/停止
  • ios开发学习--选项卡(Tab Bar) 效果源码分享--系列教程
  • MySQL几个简单SQL的优化
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • C++常用代码优化策略
  • 数据库的备份与恢复
  • mybatis的mapper的代理学习
  • 2019.2.20 c++ 知识梳理
  • Android单元测试 - 几个重要问题
  • Apache Pulsar 2.1 重磅发布
  • JavaScript-Array类型
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python_网络编程
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue 配置sass、scss全局变量
  • 分类模型——Logistics Regression
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 两列自适应布局方案整理
  • 前端之React实战:创建跨平台的项目架构
  • 删除表内多余的重复数据
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.ajax中的eval及dataType
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (solr系列:一)使用tomcat部署solr服务
  • (二)hibernate配置管理
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)UDP基本编程步骤
  • (转)我也是一只IT小小鸟
  • (转载)虚函数剖析
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net多线程总结
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • []T 还是 []*T, 这是一个问题
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C puzzle book] types
  • [Linux]使用CentOS镜像与rpm来安装虚拟机软件
  • [NowCoder]牛客OI周赛3