官方文档:
 
swagger是一个前后端api统一文档和测试框架,注意,不光是一个api文档,还可以测试
 
  • 怎么使用呢 这里慢慢道来,我们一般用的都是maven工程,所以这里直接上maven依赖
<swagger.version>1.5.8</swagger.version>
<io.springfox.version>2.5.0</io.springfox.version>
<!-- swagger start -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${io.springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${io.springfox.version}</version>
</dependency>
<!-- swagger end -->
 
  • 这里我们需要注入SwaggerConfiguration配置,直接上代码
/**
* Created by max on 8/16/16.
*
*/
@EnableSwagger2
public class SwaggerConfiguration { @Bean
public Docket getApiInfo() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("outer api")
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(outApiInfo()); } private ApiInfo outApiInfo() {
return new ApiInfo(
"mylearn 前后端接口-外部", // title 标题
"外部接口文档", // description 描述 标题下
"1.0.0", // version
"http://mylearn/*", // termsOfService
new Contact("xieyuebin","","xieyuebin@meituan.com"), // contact
"Apache 2.0", // licence
"http://www.apache.org/licenses/LICENSE-2.0.html" // licence url
); } @Bean
public UiConfiguration getUiConfig() {
return new UiConfiguration(
null,// url,暂不用
"none", // docExpansion => none | list
"alpha", // apiSorter => alpha
"schema", // defaultModelRendering => schema
UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS,
false, // enableJsonEditor => true | false
true); // showRequestHeaders => true | false
}
这是对于文档的说明以及ui的一些配置
 
  • 然后我们还需要把swagger和spring mvc结合起来,首先在web.xml里加入swagger文档的访问路径:
<!-- swagger ui 的静态资源交由default处理-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/swagger-ui.html</url-pattern>
</servlet-mapping>
 
  • 然后我们在dispatch-servlet.xml里加入对swagger静态资源jar包的访问路径如下:
<!-- swagger 配置 ,线上版本需要注释掉 -->
<beans:bean class="com.meituan.maxtse.mylearn.swagger.SwaggerConfiguration"/>
<!-- swagger ui resources-->
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars"/>
这里我们用到了我们前面定义的SwaggerConfiguration类
  • 然后我们在controller和请求参数和返回参数里加入swagger提供的注解,直接上例子
入参:
/**
* Created by max on 10/11/16.
*/
@ApiModel(description = "用户请求表单")
public class UserForm { @ApiModelProperty(value = "姓名", example = "maxTse",position = 1)
private String username; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @Override
public String toString() {
return "UserForm{" +
"username='" + username + '\'' +
'}';
}
}
返回值:
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel
public class OutResult<T> implements Serializable { @ApiModelProperty(value = "数据", example = "")
public T data; @ApiModelProperty(value = "状态码,0表示成功 其他表示失败", example = "0")
public int status; @ApiModelProperty(value = "错误信息", example = "操作成功")
public String message = "";
controller:
/**
* Created by max on 8/16/16.
*/
@Controller
@RequestMapping(value = "/test", consumes = "application/json", produces = "application/json")
public class TestController { private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class); @ApiOperation(value = "swagger test", notes = "swagger test first", tags = {SwaggerConstants.TEST_TAG})
@ResponseBody
@RequestMapping(value = "/first", method = RequestMethod.POST)
public OutResult<String> first(@RequestBody UserForm userForm) {
LOGGER.info("first userForm={}", userForm);
throw new RuntimeException("dd");
/*
return OutResult.successResult(userForm.getUsername());
*/
}
这里挨个注解解释下:
@ApiModel 表明这是一个被swagger框架管理的model,用于class上
@ApiModelProperty 这里顾名思义,就是标注在被标注了@ApiModel的class的属性上,
这里的value是对字段的描述,example是取值例子,注意这里的example很有用,对于前后端开发工程师理解文档起到了关键的作用,因为会在api文档页面上显示出这些取值来;这个注解还有一些字段取值,可以自己研究,举例说一个:position,表明字段在model中的顺序
@ApiOperation标注在具体请求上,value和notes的作用差不多,都是对请求进行说明;tags则是对请求进行分类的,比如你有好几个controller,分别属于不同的功能模块,那这里我们就可以使用tags来区分了,看上去很有条理
  • 下面我们启动项目,然后通过url:localhost:8080/swagger-ui.html来访问,就可以看到swagger文档界面了
这里是请求和返回结果的界面,看到这个界面是不是对刚才我们贴出来的具体例子里的注解上的每个值有所了解了,一一对应便能了解他们的作用
我们开始说了,这个不仅可以当文档使,而且还可以进行测试,没错,看看参数界面大家都知道了,实际上参数界面就在请求和返回结果的下面:
 
看到右上方的大红框,就是我们的入参格式,注意,这里是json格式的
然后我们可以在具体填入自己的请求参数后,点击下方的try it out按钮,就可以进行测试了。
总结:
使用swagger2.0框架大概这么几步:
1.添加maven依赖
2.编写SwaggerConfiguration配置
3.web.xml里添加swagger文档的访问路径,是静态资源
4.添加相关的spring mvc配置
5.在请求的入参和返回值 以及具体的请求上添加相应的注解
6.启动项目,访问swagger.html
注意:
由于这里使用的是json格式的入参和返回值,那么我们在controller的请求参数那里要加上@RequestBody注解,并且请求方法必须是post
 
 
 

swagger2.0与spring结合的更多相关文章

  1. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)

    在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些 ...

  2. Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常

    异常如下: 信息: Pausing Coyote HTTP/ -- :: org.apache.catalina.core.StandardService stop 信息: Stopping serv ...

  3. spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign

    Feign受Retrofix.JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部.Feign的首要目标是将Java Http客户端调用过 ...

  4. spring boot 2.0.3+spring cloud (Finchley)2、搭建负载均衡Ribbon (Eureka+Ribbon+RestTemplate)

    Ribbon是Netflix公司开源的一个负载均衡组件,将负载均衡逻辑封装在客户端中,运行在客户端的进程里. 本例子是在搭建好eureka的基础上进行的,可参考spring boot 2.0.3+sp ...

  5. spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

    参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...

  6. spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul

    Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由.过滤.监控.弹性伸缩和安全. 为什么需要Zuul Zuul.Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能:网关将 ...

  7. spring boot 2.0.3+spring cloud (Finchley)4、熔断器Hystrix

    在分布式系统中服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于他们的其他服务出现远程调度的线程阻塞.某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果 ...

  8. 【Rocket MQ】RocketMQ4.2.0 和 spring boot的结合使用,实现分布式事务

    RocketMQ4.2.0 和 spring boot的结合使用,实现分布式事务 参考地址:https://www.jianshu.com/p/f57de40621a0

  9. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

随机推荐

  1. 字符串格式的Url的截取

    一,我们先在看在页面上获取的URL的处理,如下方法: //获取全部URL string Url = Request.Url.ToString(); Url += "</br>&q ...

  2. MySQL 基础 20191025

    1.MySQL(绿色软件)的安装后: (老师课件中的) 要设置字符集不然会报 1344 错误码,有两种: 为上面的还有一种为: set names 'utf8'; 2.MySQL管理 创建数据库 CR ...

  3. js不加alert后面的代码不工作

    问题:用Ajax从后台拿到了json,append到select的option里面,然后想用for循环来设置某个作为默认值,发现在for循环外面加了个alert()的话,就能实现成功,没有加这个ale ...

  4. ajax基本原理实现

    function ajax(method,url,data,success){ try{ var xhr=new XMLHttpRequest(); }catch(e){ xhr=new Active ...

  5. 最长上升子序列(LIS)长度及其数量

    例题51Nod-1376,一个经典问题,给出一个序列问该序列的LIS以及LIS的数量. 这里我学习了两种解法,思路和代码都是参考这两位大佬的: https://www.cnblogs.com/reve ...

  6. python数字图像处理(一)图像的常见操作

    首先导入必要的库,使用Opencv读入图像,避免复杂的图像解析,同时使用Opencv作为算法的对比,由于使用环境为jupyter使用matplotlib直接可视化 import cv2 import ...

  7. 离线安装.NET Framework 3.5

    通过 NetFx3.cab 文件安装 NetFx3.cab下载链接: 链接:https://pan.baidu.com/s/1OPk-G_ChSwV89VZl6TV-LA 提取码:8zel 复制这段内 ...

  8. String 字符串和StringBuffer的知识点总结

    String字符串 1  字符串.equals();                                                   equals和length的区别:equals ...

  9. OAuth_2

    角色: OAuth2.0为用户和应用定义了如下角色: 资源拥有者.资源服务器.客户端应用.授权服务器 资源拥有者:拥有共享数据的人或应用,比如Facebook的用户就是 资源拥有者,但资源拥有者也可以 ...

  10. Python 获取当前文件所在路径

    记录几个os获取路径的函数 1. os.path.realpath(__file__):获取文件的绝对路径,包括文件自己的名字 2.os.path.dirname(path):获取path路径的上级路 ...