今天给大家介绍一款工具,这个工具目前可预见的好处是:自动维护最新的接口文档。
我们都知道,接口文档是非常重要的,但是随着代码的不断更新,文档却很难持续跟着更新,今天要介绍的工具,完美的解决了这个问题。而且,对于要使用我们接口的人来说,不需要在给他提供文档,告诉他地址,一目了然。 最近项目中一直有跟接口打交道,恰好又接触到了一个新的接口工具,拿出来跟大家分享一下。 关于REST接口,我在上篇文章中已经有介绍,这里来说一下如何配合SwaggerUI搭建RestFul API 的可视化界面。最终要达到的效果是这样的: 它可以支持Rest的所有提交方式,如POST,GET,PUT,DELETE等。 这里可以看到我们的方法注释,需要的参数,参数的类型和注释,返回值的类型注释等信息,最重要的,我们这里可以直接对REST接口测试。 接下来,我们一起开始逐步实现如图的效果 第一步:首先,引入依赖的jar包
<span style="white-space:pre"> </span><!-- swagger --> <dependency> <groupId>com.mangofactory</groupId> <artifactId>swagger-springmvc</artifactId> <version>0.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.4.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.4</version> </dependency>
第二步,创建swagger配置文件类,基本不用改,只需要修改要匹配的方法路径即可。
package com.gochina.mis.util; 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 com.mangofactory.swagger.configuration.SpringSwaggerConfig; import com.mangofactory.swagger.models.dto.ApiInfo; import com.mangofactory.swagger.plugin.EnableSwagger; import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin; @Configuration @EnableSwagger public class SwaggerConfig { private SpringSwaggerConfig springSwaggerConfig; @Autowired public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) { this.springSwaggerConfig = springSwaggerConfig; } @Bean public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns("/album/*");//这里是支持正则匹配的,只有这里配置了才可以在页面看到。 } private ApiInfo apiInfo() { ApiInfo apiInfo = new ApiInfo(null,null,null,null,null,null); return apiInfo; } }
第三步:把配置文件类加入spring容器
<span style="white-space:pre"> </span><!--swagger--> <bean class="com.gochina.mis.util.SwaggerConfig"/>
到这里,我们后台的环境代码就完成了,接着,添加SwaggerUI提供的js界面 下载swagger-ui
将dist下的文件放入webapp下
配置mvc:resource,防止spring拦截。
<span style="white-space:pre"> </span><mvc:resources mapping="/api-doc/**" location="/api-doc/" />
将index.html中的 修改为http://localhost:8080/{projectname}/api-docs
到此,完成了所有的基本配置,接下来,需要对每个接口添加注解。 下面来个实例 接口类
package com.gochina.mis.api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.gochina.mis.bean.Album; import com.gochina.mis.bean.ResultPo; import com.gochina.mis.service.AlbumService; import com.gochina.mis.util.JsonUtil; import com.gochina.mis.util.StringUtil; import .BaseVo; import .RequestAlbumVo; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; @Controller public class AlbumAction { private static Logger logger = LoggerFactory.getLogger(AlbumAction.class); @Autowired private AlbumService albumService; @ResponseBody @RequestMapping(value="album", method = RequestMethod.POST,produces = "application/json;charset=utf-8") @ApiOperation(value="第三方添加专辑", httpMethod ="POST", response=BaseVo.class, notes ="第三方添加专辑") public String postAlbum(@ModelAttribute("requestAlbumVo")RequestAlbumVo requestAlbumVo){ BaseVo result = new BaseVo(); Album album = new Album(); if (requestAlbumVo!=null) { ("传入参数:requestAlbumVo:{}",JsonUtil.beanToJson(requestAlbumVo)); try { BeanUtils.copyProperties(requestAlbumVo, album); result=albumService.save(album); } catch (Exception e) { e.printStackTrace(); result.setSuccess(false); result.setMsg("添加专辑失败!"); logger.error("添加专辑失败传入参数:requestAlbumVo:{},错误信息为:{}",JsonUtil.beanToJson(requestAlbumVo),e.getMessage()); } }else { result.setSuccess(false); result.setMsg("参数不合法!"); } ("传入参数:requestAlbumVo:{},返回结果为:{}",JsonUtil.beanToJson(requestAlbumVo),JsonUtil.beanToJson(result)); return JsonUtil.beanToJson(result); } }
我们可以看到,这里使用SpringMVC,请求参数传入的是实体类,对于传入参数的注解,就放到了实体中 请求参数实体
package ; import com.wordnik.swagger.annotations.ApiModelProperty; public class RequestAlbumVo { @ApiModelProperty(value = "专辑名称", required = true) private String name; @ApiModelProperty(value = "第三方专辑Id", required = true) private String thirdAlbumId;//第三方专辑Id @ApiModelProperty(value = "第三方专辑Id", required = true) private String thirdSystemId;//第三方系统Id @ApiModelProperty(value = "标准图", required = false) private String standardPic;//标准图 @ApiModelProperty(value = "竖图", required = false) private String ystandardPic;//竖图 @ApiModelProperty(value = "水印图片", required = false) private String markPic;//水印图片 @ApiModelProperty(value = "水印图片位置", required = false) private String markPosition;//水印图片位置 @ApiModelProperty(value = "标签", required = false) private String tag;//标签 @ApiModelProperty(value = "评分", required = false) private String score;//评分 @ApiModelProperty(value = "描述", required = false) private String description;//描述 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getThirdAlbumId() { return thirdAlbumId; } public void setThirdAlbumId(String thirdAlbumId) { this.thirdAlbumId = thirdAlbumId; } public String getThirdSystemId() { return thirdSystemId; } public void setThirdSystemId(String thirdSystemId) { this.thirdSystemId = thirdSystemId; } public String getStandardPic() { return standardPic; } public void setStandardPic(String standardPic) { this.standardPic = standardPic; } public String getYstandardPic() { return ystandardPic; } public void setYstandardPic(String ystandardPic) { this.ystandardPic = ystandardPic; } public String getMarkPic() { return markPic; } public void setMarkPic(String markPic) { this.markPic = markPic; } public String getMarkPosition() { return markPosition; } public void setMarkPosition(String markPosition) { this.markPosition = markPosition; } public String getTag() { return tag; } public void setTag(String tag) { this.tag = tag; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
返回参数,这里也是用的实体
package ; import java.sql.Timestamp; import com.wordnik.swagger.annotations.ApiModelProperty; /** * 返回信息 * @author LBQ-PC * */ public class BaseVo { /** * 状态 */ @ApiModelProperty(value = "状态") private Boolean success; /** * 消息 */ @ApiModelProperty(value = "消息") private String msg; /** * 服务器当前时间 */ @ApiModelProperty(value = "服务器当前时间戳,sample: 1434553831") private Long currentTime = new Timestamp(System.currentTimeMillis()).getTime(); public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public String getMsg() { return msg; } public void setMsg(String message) { this.msg = message; } public Long getCurrentTime() { return currentTime; } public void setCurrentTime(Long currentTime) { this.currentTime = currentTime; } }
运行访问:http://localhost:8080/api-doc/index.html ,当然,我们也可以对这个页面加权限验证
大功告成!对于开发人员来说,每个接口只需要添加一些注解,SwaggerUI会自动生成如我们文章开始时展现的页面,方便调用和测试。
相关推荐
SwaggerUI结合SpringMVC可以创建一个强大的RESTful API的可视化界面,这使得开发者能够更方便地测试、理解和文档化他们的API。以下是对这个主题的详细解释: Swagger 是一个广泛使用的工具,它遵循OpenAPI规范,这...
完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...
前端使用Ionic+ AngularJS、后端使用SpringMVC,教你如何开发RESTful风格的接口。
Swagger UI 是一个强大的工具,它与 Spring MVC 集成后可以帮助开发者轻松地为 RESTful API 创建交互式文档。这个项目是一个配置简单的 Maven 工程,旨在演示如何将 Swagger UI 结合到 Spring MVC 应用中,以自动...
基于SpringBoot+SpringMVC和多种组件构建的企业信息化开发基础平台源码.zip基于SpringBoot+SpringMVC和多种组件构建的企业信息化开发基础平台源码.zip基于SpringBoot+SpringMVC和多种组件构建的企业信息化开发基础...
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为...
Maven项目构建: SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap 源码详细地址:...
标题 "spring+springmvc+mybatis+restful+mysql" 描述了一个基于Java技术栈的Web应用程序开发架构,这是企业级应用开发中常见的组合。这个架构由五个主要部分组成: 1. **Spring**:这是一个全面的Java应用框架,...
### 分布式框架简介SSM组合+springmvc+mybatis+shiro+restful+bootstrap #### 一、基础知识与入门 本节主要介绍如何基于SSM(Spring、SpringMVC、MyBatis)框架搭建一个简单的Web应用程序,并实现一个HelloWorld...
Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理...
swagger提供的接口文档相比传统的文档方式更加直观也更加高效,但是在网上找了很多关于Swagger与SpringMvc整合的资料,发现都比较繁琐,不是很满意,于是有了这篇博客,希望对大家有所帮助。教程:...
Spring+SpringMVC+Mybatis+easyUI整合,RESTful API+redis缓存,src/main/resources/db/ssm_perfect_db.sql. 演示:http://perfect-ssm.hanshuai.xin/ admin 123456
【标题】"dubbo+zookeeper+spring+springMVC+mybatis" 描述了一个基于这些技术构建的服务消费方与服务提供方的项目架构。在这个架构中,`Dubbo`是核心的服务框架,它负责服务的注册与发现;`Zookeeper`作为注册中心...
SpringMVC是Spring框架的一部分,专门用于构建Web应用程序。它采用了模型-视图-控制器(Model-View-Controller,MVC)设计模式,将业务逻辑、数据展示和用户交互分离,提高了代码的可维护性和可扩展性。在SpringMVC...
更完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统,首先于ssm-demo仓库,perfect-ssm仓库重新调整了目录结构,只保留了ssm-maven这个可以继续优化的目录并对其中的代码做了删除修改,同时还增加了RESTful API和...
标题 "springboot + springmvc + mybatis + maven搭建成框架restful API" 描述了一个使用现代Java技术栈构建的RESTful服务。这个框架结合了Spring Boot、Spring MVC、MyBatis和Maven,这些都是Java开发中的核心工具...
本项目以“maven+springmvc+redis+mybatis整合”为主题,旨在提供一个基于这些技术的集成框架,特别强调了利用Redis作为缓存来提升应用性能。下面将详细阐述这个框架中的各个组成部分以及它们之间的协作。 首先,...
Swagger 是一个强大的 API 工具,它可以为 RESTful API 提供一套规范化的定义,以及一个交互式的文档界面,使得开发者能够轻松地了解和测试 API。而 Springmvc 是 Spring 框架的一部分,用于构建 MVC(Model-View-...
标题 "基于 SpringBoot + Spring + SpringMvc+Mybatis +Layui 开发后台管理系统" 描述了一个使用多种流行Java技术栈构建的管理系统的实例。这个系统整合了Spring Boot、Spring、Spring MVC、MyBatis以及Layui前端...
Spring+SpringMVC+Hibernate 框架集成详解 本文档旨在详细介绍 Spring、SpringMVC 和 Hibernate 框架的集成,旨在帮助开发人员快速了解这三个框架的集成过程。 Spring 框架 Spring 框架是一个 Java 语言的开源...