Spring Data REST API集成Springfox、Swagger
原文: Documenting a Spring Data REST API with Springfox and Swagger
使用Spring Date REST,你可以迅速为Spring Date repositories的创建REST API,并提供CRUD和更多功能。然而,在严谨的API开发过成功,您还希望拥有自动生成的最新API文档。
Code Example
本文附带了工作示例代码github
Swagger提供了一个用于记录REST API的规范。通过使用Springfox,我们有一个工具可以作为Spring应用程序和Swagger之间的桥梁,为某些Spring bean和注释创建一个Swagger文档。
Springfox最近还添加了一个为Spring Data REST API创建Swagger文档的功能。 这个功能还在孵化,但是我仍然玩了一下,以评估它是否可以在真实项目中使用。 因为如果是这样,Spring Data REST和Springfox的结合将允许快速开发一个记录良好的REST API。
请注意,截至目前(版本2.7.0),用于Spring Data REST的Springfox集成仍处于孵化阶段,并且存在一些严重的错误和缺少的功能(例如,请参阅此处和此处)。 因此,下面的说明和代码示例基于当前的2.7.1-SNAPSHOT版本,其中可以大大改进。
在Spring Boot / Spring Data REST应用程序中启用Springfox
为了使Springfox能够为我们的Spring Data REST API创建一个Swagger文档,您必须执行以下步骤。
添加Springfox依赖
将以下依赖项添加到您的应用程序(gradle)中:
compile('io.springfox:springfox-swagger2:2.7.0')
compile('io.springfox:springfox-data-rest:2.7.0')
compile('io.springfox:springfox-swagger-ui:2.7.0')
springfox-swagger2
包含Springfox的核心功能,允许使用Swagger 2创建API文档。springfox-data-rest
包含为Spring Data REST存储库自动创建Swagger文档的集成。springfox-swagger-ui
包含Swagger UI,它在http:// localhost:8080 / swagger-ui.html
中显示Swagger文档
配置Application
按下面的方法配置Spring Boot Application:
@SpringBootApplication
@EnableSwagger2
@Import(SpringDataRestConfiguration.class)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@EnableSwagger2
注解通过在Spring应用程序上下文中注册某些bean来启用Swagger 2支持。@Import
注释将额外的类导入到Spring应用程序上下文中,这些需要从Spring Data REST存储库自动创建Swagger文档。
创建Docket bean
你可以选择创建一个Docket类型的Spring bean。 这将被Springfox拿起来配置一些swagger文档输出。
@Configuration
public class SpringfoxConfiguration {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.tags(...)
.apiInfo(...)
...
}
}
Spring Data repositories添加注解
另外可选地,您可以使用@Api,@ApiOperation和@ApiParam注释来注释由Spring Data REST公开的Spring Data存储库。 以下更多细节。
输出
最后,通过访问浏览器中的http:// localhost:8080 / swagger-ui.html
,您应该能够查看Spring Data REST API的Swagger文档。 结果应该如下图所示。
自定义输出
上图中的数字显示了一些可以自定义生成的API文档中的东西的地方。 以下各节介绍了我认为重要的一些定制。 你可以定制超过我发现的东西,所以随时添加评论,如果你发现我错过的东西!
通用的API信息
像标题,描述,许可等信息可以通过创建一个 Docket
bean来配置,如上面的代码片段,并使用其setter来更改所需的设置。
Repository描述
可以通过创建一个名称与默认API名称完全相同的标记(示例中的“地址实体”)来更改存储库的描述,并向 Docket
对象中的此标记提供描述,并使用 @Api
将该标记库与该标记库相连接 注解。 到目前为止,我找不到修改存储库名称的方法。
@Configuration
public class SpringfoxConfiguration {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.tags(new Tag("Address Entity", "Repository for Address entities"));
}
}
@Api(tags = "Address Entity")
@RepositoryRestResource(path = "addresses")
public interface AddressRepository extends CrudRepository<Address, Long> {
// methods omitted
}
方法描述
对单个API操作的描述可以通过 @ApiOperation
注释来修改,如下所示:
public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {
@ApiOperation("find all Addresses that are associated with a given Customer")
Page<Address> findByCustomerId(@Param("customerId") Long customerId, Pageable pageable);
}
输入参数
输入参数的名称和描述可以使用 @ApiParam
注释进行配置。 请注意,从Springfox 2.7.1开始,参数名称也从Spring Data提供的 @Param
注释中读取。
public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {
Page<Address> findByCustomerId(@Param("customerId") @ApiParam(value="ID of the customer") Long customerId, Pageable pageable);
}
响应
可以使用 @ApiResponses
和 @ApiResponse
注解来调整不同的响应状态及其有效payload:
public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {
@Override
@ApiResponses({@ApiResponse(code=201, message="Created", response=Address.class)})
Address save(Address address);
}
结论
Spring Data REST允许您在创建数据库驱动的REST API时产生快速结果。 Springfox允许您快速生成该API的自动文档。但是,由Springfox生成的API文档与每个细节中的实际API都不匹配。一些手动微调和注释是必要的,如上面的定制部分所述。
一个这样的例子是,示例请求和响应的JSON在每种情况下都不能正确地呈现,因为Spring Data REST使用HAL格式,Springfox仅在少数情况下使用。通过手动工作,API文档很难保持每个细节的最新状态。
我的结论是,Spring Data REST和Springfox的结合是一个很好的起点,可以快速生成一个REST API,它的文档对于大多数用例来说足够好,特别是当API是在一组封闭的开发人员中开发和使用的时候。对于公共API,细节更重要一点,让Swagger注释和Springfox配置保持最新的每个细节可能令人沮丧。
Spring Data REST API集成Springfox、Swagger的更多相关文章
- spring boot 基础篇 -- 集成接口测试Swagger
一.在pom.xml加入Swagger jar包引入 <dependency> <groupId>io.springfox</groupId> <artifa ...
- spring data mongo API learn(转)
显示操作mongo的语句,log4j里面加入: log4j.logger.org.springframework.data.mongodb.core=DEBUG, mongodb log4j.appe ...
- spring boot之使用springfox swagger展示restful的api doc
摘要 springfox swagger展示restful的api doc, swagger is A POWERFUL INTERFACE TO YOUR API. 新增文件: import org ...
- Spring Boot集成Springfox Swagger3和简单应用
摘要:Springfox Swagger可以动态生成 API 接口供前后端进行交互和在线调试接口,Spring Boot 框架是目前非常流行的微服务框架,所以,在Spring Boot 项目中集成Sp ...
- Spring Data Jpa 初探
Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库.Map-Reduce 框架.云数据服务等等;另外也包含对关系数据库的访问支持. 下载网址: ...
- spring data jpa 操作pipelinedb 的continuous view 与stream
一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...
- spring cloud 学习(10) - 利用springfox集成swagger
对绝大多数程序员而言,写接口文档是一件痛苦的事情,相对文档,他们更愿意写代码.最理想的情况就是:代码即文档!服务开发完成后,部署上去文档就自动生成,没错,这就是springfox + swagger要 ...
- 15、Spring Boot 2.x 集成 Swagger UI
1.15.Spring Boot 2.x 集成 Swagger UI 完整源码: Spring-Boot-Demos 1.15.1 pom文件添加swagger包 <swagger2.versi ...
- spring boot / cloud (三) 集成springfox-swagger2构建在线API文档
spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...
随机推荐
- Jenkins可用环境变量列表以及环境变量的使用(Shell/Command/Maven/Ant)
一.可用环境变量列表(以下来自google翻译): BRANCH_NAME 对于多分支项目,这将被设置为正在构建的分支的名称,例如,如果您希望从而master不是从特征分支部署到生产. CHANGE_ ...
- My year of 2017
有一个姓罗的胖子,他说他有一个要坚持20年计划,第一年我真的不觉得什么,好比每天晚上都要刷牙每天早上都要吃早饭一样简单.实际几年走下来之后,发现能坚持下来真不是一件容易的事情,生活中总会有各种各样的事 ...
- ECShop全系列版本远程代码执行高危漏洞分析+实战提权
漏洞概述 ECShop的user.php文件中的display函数的模版变量可控,导致注入,配合注入可达到远程代码执行.攻击者无需登录站点等操作,可以直接远程写入webshell,危害严重. 漏洞评级 ...
- 解析Java分布式系统中的缓存架构(上)
作者 陈彩华 文章转载交流请联系 caison@aliyun.com 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2. ...
- FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...
- Vue过渡mode属性踩坑
近期学习Vue的过渡效果的时候,mode属性的"in-out"."out-in"设置了不起作用,官网上的例子让我看了有点迷,问题解决后以此文记录之. 首先我们看 ...
- OutOfMemoryError 到底能不能被捕获?
感觉中,OutOfMemeryError(内存溢出错误) 是jvm抛出的异常,是不能被捕获的. 直到工作中真的遇到OOM异常,而且tomcat服务还一直对外提供服务. 那么问题来了: 1. OOM 到 ...
- Python中parameters与argument区别
定义(define)一个带parameters的函数: def addition(x,y): return (x+y) 这里的x,y就是parameter 调用addition(3,4) 调用(cal ...
- Python中的注释和解注释
注释 目标 注释的作用 单行注释(行注释) 多行注释(块注释) 01. 注释的作用 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释) 以 # 开头,# ...
- 一位90后的自述:如何从年薪3w到30w
作者介绍:90后生人/男/二本本科/世界500强技术主管 1.引言 上海小胖,曾就职于pwc(普华永道)担任TechLeader,带领DS(Data Scientist)团队完成全美医疗保险大数据项目 ...