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配置保持最新的每个细节可能令人沮丧。

原文地址:https://www.cnblogs.com/tinyking/p/8566266.html

时间: 2024-10-08 08:10:45

Spring Data REST API集成Springfox、Swagger的相关文章

Spring Data 常用 API之原理分析 和 基本 API

Spring data 出现目的 为了简化.统一 持久层 各种实现技术 API所以 spring data 提供一套标准 API 和 不同持久层整合技术实现spring-data-commons 一套标准 APIspring-data-jpa 基于整合 JPA 实现 自己开发 Repository 只需要继承 JpaRepository 接口lCrudRepositorysave.delete.deteleAll.findAll.findOne.countPagingAndSortingRepo

spring boot之使用springfox swagger展示restful的api doc

新增文件: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springfra

使用JAVA操作ElasticSearch(Java API 和Spring Data ElasticSearch)

Java API 我的ElasticSearch集群的版本是6.2.4,导入elasticsearch相关的maven依赖也是6.2.4,不同版本的api可能会有差异 一:maven依赖 <!--elasticsearch核心依赖--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version

java(样品集成框架spring、spring mvc、spring data jpa、hibernate)

这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适spring data jpa该框架,该框架编写dao上课时间,只需要编写一个接口声明,spring data jpa会自己主动的实现事实上现类,使用起来比較方便,至于具体的用法还请自己百度吧,由于我也不清楚. 个人感觉另一个比較不错的地方就是可以打印sql语句,都知道hibernate打印的sql语句并不会

hibernate search5.3.0全文检索集成到spring data jpa

hibernate search 我就不多说了,它是基于lucene的全文检索工具,记得上大学那时候接触了compass全文检索工具,后来也没怎么用,再后来这家伙不更新了,所以hibernate就推出了自己的基于lucene的全文检索工具就是这家伙hibernate Search. 不用说天然的优势就是可以无缝的和hibernate集成甚至不需要什么配置,一直在更新中,最近想在自己的博客里面加入搜索功能,本想用比较热乎的solr,找了半天资料还是放弃了,用在我的博客里面有点大题小做了,所以自然就

Spring MVC集成Spring Data Reids和Spring Session实现Session共享

说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入.且最新版本的2.0.1会与Spring MVC 4.1.4有冲突,估计写法错了.所以要明确引入的Spring MVC版本和Spring Data Redis和Spring Session版本. 小提示:如果想要官方明确的版本可以参考Spring Boot的版本,比如我使用了1.4.7的Spring

Spring MVC&Spring Data JPA过滤数据的另一种API

这就是我滚动的方式2014年3月23日在春天mvc | 规格 | 春季资料 | jpa | 参数解析器 | java | 搜索 | 搜索 | 滤波 Spring MVC&Spring Data JPA过滤数据的另一种API 更新 自从我写这篇文章以来已经有一段时间了.我仍然认为它值得阅读,但请务必检查Github页面,因为所描述的库已经发展,并已成为Maven Central中的一个完整的开源项目. 我坚信,一个卓越的框架最终会成为一种(领域特定的)语言. 我已经使用了Spring MVC好几年

如何正确地在Spring Data JPA和Jackson中用上Java 8的时间相关API(即JSR 310也即java.time包下的众神器)

用过的肯定知道,JSR310的时间API真的是神器,极大的方便了在Java中对时间操作的过程. JSR 310规范领导者Stephen Colebourne就是joda-time作者,其主要思想也是借鉴了joda-time,而不是直接把joda-time移植到Java平台中,API是类似的,但做了改进,具体的改进请参考其2009年的一篇文章和InfoQ对他的采访: http://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html h

Spring Boot之Swagger2集成

一.Swagger2简单介绍 Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档.它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明.另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 二.Spring Boot集成Swagger2步骤 1)引入Swagger2的Maven坐标 <!--swa