Swagger框架学习分享
Swagger框架学习分享
- Created and last modified by 刘新宇 大约1分钟以前
转至元数据起始
一、背景介绍
1.1.项目简介
Swagger项目是由Dilip Krishnan和Adrian Kelly等人维护开发的一个为Spring Web MVC 项目提供方法文档的一个框架。该框架最主要的功能是将Controller的方法进行可视化的展现,像方法注释,方法参数,方法返回值等都提供了相应的用户界面,尤其是对JSON参数的支持。同时可以结合swagger-ui可以对用户界面进行不同程度的定制,也可以对方法进行一个简单的测试。
1.2.code repository
- github:https://github.com/springdox/springdox
- maven:http://www.mvnrepository.com/artifact/com.mangofactory/swagger-springmvc
1.3.演示项目
- 官方:https://github.com/adrianbk/swagger-springmvc-demo
- 民间:https://github.com/qq291462491/bugkillers
二、开发准备
2.1.环境准备
- idea intellij 13+
- Oracle java 1.6
- Gradle 2.0 +
2.2.项目搭建
2.2.1.jar仓库
Maven
<repositories>
<repository>
<id>jcenter-release</id>
<name>jcenter</name>
<url>http: //oss.jfrog.org/artifactory/oss-release-local/</url>
</repository>
</repositories>
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version> 1.0 . 0 </version>
</dependency>
|
Gradle
repositories {
jcenter()
}
compile "com.mangofactory:swagger-springmvc:1.0.0"
|
2.2.2.相关依赖
- As of v0.9.5 all dependencies on scala have been removed.
- Spring 3.2.x or above
- jackson 2.4.4
- guava 15.0
2.2.3.编写配置文件
编写一个Java文件,并使用注解:
- @Configuration 配置注解,自动在本类上下文加载一些环境变量信息
- @EnableWebMvc
- @EnableSwagger 使swagger生效
- @ComponentScan("com.myapp.packages") 需要扫描的包路径
示例:
package org.bugkillers.back.swagger;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.paths.SwaggerPathProvider;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
/*** 使用注解的方式来扫描API* 无需在Spring的xml配置文件来配置,由 @see @EnableWebMvc 代替* <p/>* <p> @author 刘新宇** <p> @date 2015年1月30日 下午1:18:48* <p> @version 0.0.1*/
@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan(basePackages ={"com.ak.swaggerspringmvc.shared.controller", "com.ak.spring3.music"})
public class CustomJavaPluginConfig extends WebMvcConfigurerAdapter {private SpringSwaggerConfig springSwaggerConfig;@Autowiredpublic void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {this.springSwaggerConfig = springSwaggerConfig;}/*** 链式编程 来定制API样式* 后续会加上分组信息* @return*/@Beanpublic SwaggerSpringMvcPlugin customImplementation(){return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns(".*")
// .pathProvider(new GtPaths()).apiVersion("0.0.1").swaggerGroup("user");}private ApiInfo apiInfo() {ApiInfo apiInfo = new ApiInfo("bugkillers-back API","bugkillers 后台API文档","<a href="http://127.0.0.1:9081/api" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: inherit !important; background: none !important;">http://127.0.0.1:9081/api","bugkillers@163.com","My License","My Apps API License URL");return apiInfo;}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}class GtPaths extends SwaggerPathProvider{@Overrideprotected String applicationPath() {return "/restapi";}@Overrideprotected String getDocumentationPath() {return "/restapi";}}}
也可以自己不写配置类,直接使用默认的实现类,在Spring的配置文件中共配置:(不推荐)
1
2
|
<mvc:annotation-driven/> <!-- Required so swagger-springmvc can access spring's RequestMappingHandlerMapping -->
<bean class = "com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
|
2.2.4.与swagger-ui集成
方式一:
- Note: Only use this option if you don't need to customize any of the swagger-ui static content, otherwise use option 2.
- Use the web-jar which packages all of the swagger-ui static content.
- Requires that your app is using the servlet 3 specification.
- For non-spring boot applications some extra spring configuration (ResourceHandler's) is required. See: https://github.com/adrianbk/swagger-springmvc-demo/tree/master/swagger-ui
1
2
3
4
|
dependencies {
...
compile "org.ajar:swagger-spring-mvc-ui:0.4"
}
|
方式二:(推荐)
- Manually copy all of the static content swagger-ui's dist directory (https://github.com/wordnik/swagger-ui/tree/master/dist)
- Provide the necessary view resolvers and resource handlers to serve the static content.
- Consult the spring documentation on serving static resources.
The following is one way to serve static content from /src/main/webapp
1
2
3
4
5
|
<!-- Direct static mappings -->
<mvc:resources mapping= "*.html" location= "/" />
<!-- Serve static content-->
<mvc: default -servlet-handler/>
|
2.6.5.Controller配置
使用注解对Controller进行配置:
- @Api 配置方法API
- @ApiOperation API的操作 GET PUT DELETE POST
- @ApiParam API的方法参数描述
示例Controller:
package org.bugkillers.back.user.controller;
import java.util.List;
import org.bugkillers.back.bean.User;
import org.bugkillers.back.result.Result;
import org.bugkillers.back.user.service.UserService;
import org.bugkillers.back.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
/*** 用户操作Controller* <p/>* <p>** @author 刘新宇** <p>* @date 2015年1月30日 上午10:50:34* <p>* @version 0.0.1*/
@Api(value = "user-api", description = "有关于用户的CURD操作", position = 5)
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService service;/*** 注册用户* @param user*/@ApiOperation(value = "注册", notes = "注册用户", position = 3)@ResponseBody@RequestMapping(value = { "/regist" }, method = RequestMethod.POST)public ResponseEntity<?> regist(@RequestBody User user) {service.save(user);Result<String> result = ResultUtil.buildSuccessResult("注册成功");return new ResponseEntity<Result<String>>(result, HttpStatus.OK);}/*** 根据pk查找用户* @param userPk* @return*/@ApiOperation(value = "根据pk查找用户", notes = "返回用户实体对象", response = User.class, position = 2)@ResponseBody@RequestMapping(value = { "/{userPk}" }, method = RequestMethod.GET)public ResponseEntity<?> findByPk(@ApiParam(value = "填写Pk", allowableValues = "range[1,5]", required = true, defaultValue = "userPk", allowMultiple = true) @PathVariable("userPk") Integer userPk) {Result<User> result = ResultUtil.buildSuccessResult(service.findByPk(userPk));return new ResponseEntity<Result<User>>(result, HttpStatus.OK);}/*** 测试* @param who* @return*/@ApiOperation(value = "Hellow World", notes = "测试功能", position = 1)@ResponseBody@RequestMapping(value = { "/hello/{who}" }, method = RequestMethod.GET)public ResponseEntity<?> hello(@ApiParam(value = "填写名称") @PathVariable("who") String who) {Result<String> result = ResultUtil.buildSuccessResult( "Hello guys" + " " + who + "!");return new ResponseEntity<Result<String>>(result, HttpStatus.OK);}/*** 查询所有* @return*/@ApiOperation(value = "获取所有用户", notes = "返回用户实体对象集合", position = 5)@RequestMapping(value = "/findAll", method = RequestMethod.GET)public @ResponseBody ResponseEntity<?> findAll() {Result<List<User>> result = ResultUtil.buildSuccessResult( service.findAll());return new ResponseEntity<Result<List<User>>>(result, HttpStatus.OK);}/*** 根据用户pk更新实体* @param userPk 用户pk* @param user 返回更新后的实体* @return*/@ApiOperation(value = "更新用户", notes = "返回更新的用户实体对象",position = 5)@RequestMapping(value = "/update/{userPk}", method = RequestMethod.PUT)public ResponseEntity<?> updateByPk(@PathVariable("userPk") Integer userPk, @RequestBody User user) {user.setPk_user(userPk);service.update(user);Result<User> result = ResultUtil.buildSuccessResult(user);return new ResponseEntity<Result<User>>(result, HttpStatus.OK);}/*** 根据用户pk删除实体* @param userPk 用户pk* @return*/@ApiOperation(value = "删除用户", notes = "根据pk删除用户",position = 5)@RequestMapping(value = "/delete/{userPk}", method = RequestMethod.GET)public ResponseEntity<?> deleteByPk(@PathVariable("userPk") Integer userPk) {service.delete(userPk);Result<String> result = ResultUtil.buildSuccessResult("删除成功");return new ResponseEntity<Result<String>>(result, HttpStatus.OK);}
}
2.2.6.启动中间件
项目配置了Jetty或者Tomcat等Web容器的话,在对应的Controller配置好的话就可以启动看效果了。
- 访问本机:http://127.0.0.1:9081/api
- 远程示例:http://115.29.170.213/api
2.2.7.需求定制
- 分组信息定制
- Url定制
- Http相应定制
三、学习感想
Swagger很好的为我们在开发RESTful框架应用时,前后台分离的情况下提供了很有效的解决方案,上手迅速,操作简单,界面精简,功能完善,满足各种定制化的需求,是在使用Spring MVC做Web开发时的不二选择。通过对swagger的学习,增强了英语交流的能力,改变了以前的学习方法,收获了很多,同时也也得感谢国外友人的悉心帮助~技术无国界~
3.1 Guava工具类的使用 http://ifeve.com/google-guava/
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等
3.2 Gradle构建工具的使用 http://ifeve.com/google-guava/
配置更加简洁,支持Maven,好多开源项目已经从Maven转到Gradle。
3.3 Groovy语言 http://groovy.codehaus.org/User+Guide
和scala、clojure等同是在JVM上运行的脚本语言,丰富的类库,和Java互通,可以作为Java程序员的第二语言。
3.4 链式编程 (return this)
Java中类似Swagger配置文件SwaggerSpringMvcPlugin
JQuery中类似 $("#p1").css("color","red").slideUp(2000).slideDown(2000);
在公司的Wiki上写的博文,因为外面访问不了公司的内网,故贴过来给需要的小伙伴们分享一下,有疑问的可以随时交流。
Swagger框架学习分享相关推荐
- 【框架学习分享】HttpRunner
今天文章分为两部分 :) PART1 HttpRunner内容分享/ PART2 关于后厂村儿 10 Minutes HttpRunner: PART 1 首先感谢作者开源
- 资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结
资深算法工程师万宫玺:Java工程师转型AI的秘密法宝--深度学习框架Deeplearning4j | 分享总结 本文作者:杨文 2018-01-02 11:03 导语:一文读懂深度学习框架Deepl ...
- SpringBoot基础学习之整合Swagger框架(上篇)
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...
- abp框架java,【Net】ABP框架学习之正面硬钢
前言 本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法... 我们不去官网下载模板,直接引用DLL,直接使用. WebApi项目创建 首先创建一个WebApi项目,结构如下. 然后Nuget ...
- 胡锐锋:组队学习分享(队长)
组队学习分享(队长) 自我介绍 胡锐锋,现为Datawhale成员,目前担任<统计学习方法习题解答>开源项目的负责人,已工作近8年,由大数据平台研发工程师转变成一位项目管理人.我的人生目标 ...
- python中if语句缺省else_9_【Python学习分享文章】_if(条件语句)
[Python学习分享文章]_if(条件语句)_logicalJudgement介绍及基本操作 综述 计算机的"条件语句"和生活中的"条件成立"是不一样的. 一 ...
- 老张 .NetCore与Vue 框架学习
缘起 作为一个.Net攻城狮已经4年有余了,一直不温不火,正好近来项目不是很忙,闲得无聊,搞一搞新技术,一方面是打发无聊的时间,一方面也是督促自己该学习辣!身边的大神都转行的转行,加薪的加薪,本人比较 ...
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- Web前端开发入门学习分享
Web前端开发入门学习分享 1:如何开始学习Web前端 首先你需要学习html的各个标签,掌握其用法和规范,明白其作用. 开始学习css的使用,你先学习在html页面中为标签增加css样式,其次是将c ...
最新文章
- 【有奖辩论】工程师和销售创业谁更有优势?
- rancher安装和使用
- dvwa如何打开_DVWA详细 安装
- 两个异常:a circular reference was detected while serializing及 Maximum length exceeded
- 计算机调试员高级理论知识试卷,电子计算机设备调试员(高级)考核复习题—理论试题.doc...
- 使用 ONNX 模型做预测
- SearchView去除下划线
- Flume 知识点总结
- HTML image button
- Excel 连接 MySQL 导入数据 自定义 SQL (Excel 2016 + 适用)
- 数学建模美赛历年优秀论文(O奖)
- 《工业设计史》第九章:职业工业设计师的出现
- 三维马氏距离_马氏距离2
- 给计算机专业的同学一些建议
- 【NVMe2.0b 10】Controller Shutdown 与 NVM Subsystem Shutdown
- java中,判断当前时间是否处于某个一个时间段内
- java 文件移动_java 文件移动
- php网页视频播放插件下载_视频播放插件Video.js
- 十分钟掌握 “UML ” 的基本使用
- 《python数据分析与挖掘》-步骤
热门文章
- Spring3 -- IOC容器的基本原理 02
- 信息学奥赛培训python吗
- 测量学(三)测量点制图转CAD格式
- Activiti 7 —— BPMN —— Visual Paradigm —— BPMN工作流程图组件了解应用、绘图、结构组成、案例学习
- 暑期训练第二阶段 训练赛总结(一)
- 在win7下制作MAC启动u盘
- Chrome 浏览器打开页面变成下载html文件的问题
- 利用ArcGIS做一张“三调“土地利用现状图(附三调符号库下载)
- linux下源码编译升级ssh版本,ssh打补丁过程
- 动力节点面试题mysql真的难_动力节点整理120道面试问题集锦