ITPub博客

首页 > 数据库 > 数据库开发技术 > Spring-Data-REST轻松搞定RESTfulAPI

Spring-Data-REST轻松搞定RESTfulAPI

原创 数据库开发技术 作者:HelloTech技术派 时间:2017-12-17 08:00:00 0 删除 编辑

背景

昨天同事问我有没有研究过 spring-boot-starter-data-rest,没有~但是看名字就大概知道是做什么的(命名的重要性),因为之前有了解过 spring-boot-starter-data-jpa ,过一会发过两个截图过来。真的很强大,感觉这个在使用RESTful风格接口协议的微服务时都不用写Controller了。

什么是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把我们需要编写的大量REST模版接口做了自动化实现。

两行代码即可实现

在网上大概了解一下,然后动手做个demo,果然是两行代码即可实现。

  • 新建一个Spring Boot项目,添加依赖

  1. <parent>

  2.    <artifactId>spring-boot</artifactId>

  3.    <groupId>com.gemantic</groupId>

  4.    <version>1.0-SNAPSHOT</version>

  5. </parent>

  6. <dependencies>

  7.    <dependency>

  8.        <groupId>org.springframework.boot</groupId>

  9.        <artifactId>spring-boot-starter</artifactId>

  10.    </dependency>

  11.    <dependency>

  12.        <groupId>org.springframework.boot</groupId>

  13.        <artifactId>spring-boot-starter-web</artifactId>

  14.    </dependency>

  15.    <dependency>

  16.        <groupId>org.springframework.boot</groupId>

  17.        <artifactId>spring-boot-starter-data-rest</artifactId>

  18.    </dependency>

  19.    <dependency>

  20.        <groupId>org.springframework.boot</groupId>

  21.        <artifactId>spring-boot-starter-data-jpa</artifactId>

  22.    </dependency>

  23.    <dependency>

  24.        <groupId>mysql</groupId>

  25.        <artifactId>mysql-connector-java</artifactId>

  26.        <scope>runtime</scope>

  27.    </dependency>

  28.    <!-- 简化代码 -->

  29.    <dependency>

  30.        <groupId>org.projectlombok</groupId>

  31.        <artifactId>lombok</artifactId>

  32.        <version>1.16.14</version>

  33.    </dependency>

  34.    <!-- 类似swagger -->

  35.    <dependency>

  36.        <groupId>org.springframework.data</groupId>

  37.        <artifactId>spring-data-rest-hal-browser</artifactId>

  38.    </dependency>

  39.    <!-- datasource pool-->

  40.    <dependency>

  41.        <groupId>com.alibaba</groupId>

  42.        <artifactId>druid</artifactId>

  43.        <version>1.0.14</version>

  44.    </dependency>

  45.    <dependency>

  46.        <groupId>org.springframework.boot</groupId>

  47.        <artifactId>spring-boot-starter-test</artifactId>

  48.        <scope>test</scope>

  49.    </dependency>

  50. </dependencies>

  • 表结构

  1. CREATE TABLE `user` (

  2.  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  3.  `user_name` varchar(100) DEFAULT NULL,

  4.  `password` varchar(100) DEFAULT NULL,

  5.  `phone` varchar(100) DEFAULT NULL,

  6.  `locked` tinyint(1) DEFAULT '0',

  7.  PRIMARY KEY (`id`),

  8.  UNIQUE KEY `idx_user_user_name` (`user_name`)

  9. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

放点数据进去,如下图:

  • 与表对应的实体

  1. import lombok.Data;

  2. import javax.persistence.Entity;

  3. import javax.persistence.GeneratedValue;

  4. import javax.persistence.GenerationType;

  5. import javax.persistence.Id;

  6. /**

  7. * Created by Yezhiwei on 17/10/31.

  8. */

  9. @Data

  10. @Entity

  11. public class User {

  12.    @Id

  13.    @GeneratedValue(strategy= GenerationType.AUTO)

  14.    private Long id;

  15.    private String userName;

  16.    private String password;

  17.    private String phone;

  18.    private Integer locked;

  19. }

  • 创建User表对应的Repository

  1. import com.gemantic.model.User;

  2. import org.springframework.data.jpa.repository.JpaRepository;

  3. import org.springframework.data.rest.core.annotation.RepositoryRestResource;

  4. /**

  5. * @author Yezhiwei

  6. * @date 17/12/16

  7. */

  8. @RepositoryRestResource(path="user")

  9. public interface UserRepository extends JpaRepository<User, Long> {

  10. }

自定了一个接口UserRepository 继承了JpaRepository,其中泛型中的User是实体类,Long是主键类型,在类的头部加上了一个 @RepositoryRestResource注解,并添加了一个Path为user。就这样,两行代码即可实现User实体类的RESTFul风格的所有接口。

  • 测试,访问 http://localhost:8080/user

接口中自动附带查询详情的链接

分页测试, http://localhost:8080/user?size=2&page=3

接口中同样自动附带分页的链接,分页信息

这样更便于解耦前后端,后端如果链接地址变了,前端不用改,直接用Link里面的地址访问

  • 同样,也提供了一个类似swagger的接口测试UI

  1. <!-- 类似swagger -->

  2. <dependency>

  3.    <groupId>org.springframework.data</groupId>

  4.    <artifactId>spring-data-rest-hal-browser</artifactId>

  5. </dependency>


问题:

  • 现在还不知道自动转换成REST服务有哪些缺点?

  • 自动转换成REST服务,是否支持自定义功能?

  • 还需要进一步测试与Feign一起使用的情况。

  • ......




原文作者:HelloTech技术派;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-05

  • 博文量
    181
  • 访问量
    73730