一、介绍spring data rest
Spring Data REST是基于Spring Data的repository之上,可以把 repository 自动输出为REST资源,目前支持:
Spring Data JPA
Spring Data MongoDB
Spring Data Neo4j
Spring Data GemFire
Spring Data Cassandra
将 Repository 自动转换成REST服务。注意是自动。
三、准备工作
因为Spring Data REST是基于Spring Data的repository之上的,所以我们本节的内容我们选择在《4.6.整合Spring Data JPA操作数据》章节的代码基础上完成。
配置好JPA数据源
创建Article实体类
创建ArticleRepository接口
不需要去创建并手写Service 层和Controller层,将由Spring Data REST帮我们自动完成。
二、实现rest接口的最快方式
通过maven坐标引入Spring Data REST
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
在JPA(mogodb等)Repository接口上面加上RepositoryRestResource注解,path是Rest接口资源的基础访问路径。
@RepositoryRestResource(path="articles") //就是这一行神奇的代码,甚至这一行都可以不写
public interface ArticleRepository extends JpaRepository<Article,Long> {
}
就简单的这样一个实现,Spring Data Rest就可以基于article资源,生成一套GET、PUT、POST、DELETE的增删改查的REST接口,并对外提供服务。如下图:
注意这个图不是spring-boot-starter-data-rest提供的,下文再说
访问测试,可以通过浏览器或postman,如查询所有:
三、关于接口文档若干问题与建议
上面的那张图是swagger的图么?答:上面的那张图是集成OpenAPI的图(可以认为是Swagger3.0),非常建议大家使用在线API文档,不然你怎么知道Spring Data Rest帮你生成了哪些API接口,你可以使用哪些接口。
请注意一个问题:spring-boot-starter-data-rest与swagger2.0并不兼容,所以请参考《2.7.Swagger3-即OpenAPI使用》章节进行在线文档的实现。
但是OpenAPI默认只能帮我们把手写的代码Controller生成API文档,如果你希望它把spring-boot-starter-data-rest实现的API也展示出来,需要引入
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-data-rest</artifactId>
<version>1.4.0</version>
</dependency>
如果你之前的OpenAPI有分组,这里也需要增加一个分组(参考:《2.7.Swagger3-即OpenAPI使用》)
@Bean
public GroupedOpenApi articlesApi() {
return GroupedOpenApi.builder()
.group("articles")
.pathsToMatch("/articles/**")
.build();
}
四、关键字查询“API接口”
我们还可以依赖JPA的关键字持久层查询接口,实现关键字查询的“API”接口。
@RepositoryRestResource(path="articles")
public interface ArticleRepository extends JpaRepository<Article,Long> {
Article findByAuthor(String author);
}
接口功能文档如下:通过article表的author参数查询一条记录。