Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Data REST不完全指南(一)

Spring Data REST不完全指南(一)

作者头像
东溪陈姓少年
发布于 2020-08-06 07:18:20
发布于 2020-08-06 07:18:20
1.6K00
代码可运行
举报
文章被收录于专栏:TECH flowerTECH flower
运行总次数:0
代码可运行

简介

Spring Data REST是Spring Data项目的一部分,可轻松在Spring Data存储库上构建超媒体驱动的REST Web服务。

Spring Data REST 构建在 Spring 数据存储库之上,分析应用程序的域模型,并公开模型中包含的聚合的超媒体驱动的 HTTP 资源。

特征:

  • 使用 HAL 媒体类型来公开域模型的 REST API
  • 适用集合、项目(item)和关联资源表示你的模型。
  • 通过链接导航支持分页。
  • 允许动态过滤收集资源。
  • 通过资源api来暴露你repositories中定义的资源查询方法。
  • 允许通过处理Spring ApplicationEvents来处理REST请求。
  • 公开有关ALPS和JSON Schema模型的元数据。
  • 允许通过投影定义客户特定的表示形式。
  • 发布一个定制的HAL浏览器变体以利用公开的元数据。
  • 目前支持JPA,MongoDB,Neo4j,Solr,Cassandra,Gemfire。
  • 允许对公开的默认资源进行高级自定义。

?:目前对Spring Data REST适用分析:快速生成数据库资源对外的接口(适用于一些逻辑简单的数据对外接口)


分析

使用Spring Data REST并实现以下功能来满足日常api的开发过程:

  1. 需要满足的一些要求:
  2. 1.针对字段级别,方法级别,类级别进行限制(禁止某些字段,方法,接口的对外映射)。
  3. 2.对数据增删改查的限制(禁止某些请求方法的访问)。
  4. 3.能个性化定义请求的路径。
  5. 4.对所传参数进行值校验。
  6. 5.响应统一处理。
  7. 6.异常处理。
  8. 7.数据处理的切面。

以上列出了我们日常接口开发中比较常见的一些功能需求,这里将演示使用Spring Data REST并结合实现上述功能来快速开发HAL REST API。


准备

条件:

jdk11 Springboot 2.2.6.RELEASE maven Spring Data JPA

添加依赖

本文中演示Spring Data JPA结合Spring Data REST

1.添加Spring Data持久层依赖:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
 <dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
</dependency>

目前Spring Data REST支持JPA,MongoDB,Neo4j,Solr,Cassandra,Gemfire,所以使用时可根据自己的需求引入不同的Spring Data依赖,本文将使用JPA作为演示。

2.添加Spring Data REST相关依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--Spring Data REST-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<!--Spring Data REST 数据浏览工具-->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>

简单尝试

示例中将用一个简单的租客系统来做演示。

创建一个房子类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Data
@Accessors(chain = true)
public class House {
    @Id
    @GeneratedValue
    private Long id;

    private String houseNumber;

    private String owner;

    private String idCard;

    public House() {
    }

    public House(String houseNumber, String owner, String idCard) {
        this.houseNumber = houseNumber;
        this.owner = owner;
        this.idCard = idCard;
    }
}

创建一个租客类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Data
@Accessors(chain = true)
public class Tenant {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    //隐私信息不需要暴露
    private String idCard;

    private String mobile;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime rentDateTime;

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
    private House house;

    public Tenant() {
    }

    public Tenant(String name, String idCard, String mobile, LocalDateTime rentDateTime, House hous) {
        this.name = name;
        this.idCard = idCard;
        this.mobile = mobile;
        this.rentDateTime = rentDateTime;
        this.house = hous;
    }
}

此时,我们新建一个租客的Reopsitory

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface TenantRepository extends CrudRepository<Tenant, Long> {
    Page<Tenant> findAllByNameContaining(String name, Pageable page);

    Page<Tenant> findAllByIdCardContaining(String idCard, Pageable page);

    Tenant findFirstByMobile(String mobile);

    Tenant findFirstByIdCard(String idCard);
}

运行前我们准备好初始化数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
public class SpringDataRestDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestDemoApplication.class, args);
    }

    @Resource
    private TenantRepository tenantRepository;

    @PostConstruct
    public void initRepo() {
        //准备房子信息
        List<House> houses = new ArrayList<>();
        House zhangsan = new House("1101", "张三", "330521******1");
        House zhangsi = new House("1102", "张四", "330521******2");
        House zhangwu = new House("1103", "张五", "330521******3");
        House zhangliu = new House("1104", "张六", "330521******4");
        House zhangqi = new House("1105", "张七", "330521******5");
        House zhangba = new House("1106", "张八", "330521******6");
        //准备租客信息
        List<Tenant> tenants = new ArrayList<>();
        tenants.add(new Tenant("王一", "330522******1", "186****3331", LocalDateTime.now().minusDays(1), zhangsan));
        tenants.add(new Tenant("王二", "330522******2", "186****3332", LocalDateTime.now().minusDays(2), zhangsi));
        tenants.add(new Tenant("王三", "330522******3", "186****3333", LocalDateTime.now().minusDays(3), zhangwu));
        tenants.add(new Tenant("王四", "330522******4", "186****3334", LocalDateTime.now().minusDays(4), zhangliu));
        tenants.add(new Tenant("王五", "330522******5", "186****3335", LocalDateTime.now().minusDays(5), zhangqi));
        tenants.add(new Tenant("王六", "330522******6", "186****3336", LocalDateTime.now().minusDays(6), zhangba));
        tenantRepository.saveAll(tenants);
    }
}

启动项目,并且访问localhost:8080,如下图:

上图是Spring Data REST的HAL数据浏览器,通过它能高效的查询和调试Spring Data REST对外提供的接口。

我们可以看到响应内容的格式,正是符合HAL类型的格式。

访问http://localhost:8080/tenants/search

上图可以看到,Spring Data REST对外暴露了我们在Repository中定义的查询方法,并且可以看到response Body中数据格式符合HAL格式类型,通过HAL格式的响应数据,我们轻松就能知道这些查询方法对应的请求路径,起到了一个文档的作用,使api能够自发现。


总结

本文初步的介绍了Spring Data REST的功能及特征,并且演示了如何在项目中引入Spring Data REST,并结合Spring Data REST实现了简单的演示Demo。下一篇文章将介绍并演示如何在Spring Data REST中实现一些必要的功能,以此来满足我们日常的接口开发工作。

本文代码示例:https://gitee.com/jeker8chen/spring-data-rest-in-practice.git

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TECH flower 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Data REST不完全指南(二)
上一篇文章介绍了Spring Data REST的功能及特征,以及演示了如何在项目中引入Spring Data REST并简单地启动演示了Spring Data REST项目。在本文中,我们将深入了解Spring Data REST的特性,以此来满足我们日常api开发工作的要求。
东溪陈姓少年
2020/08/06
1.2K0
Spring Data REST不完全指南(三)
上一篇我们介绍了使用Spring Data REST时的一些高级特性,以及使用代码演示了如何使用这些高级的特性。本文将继续讲解前面我们列出来的七个高级特性中的后四个。至此,这些特性能满足我们大部分的接口开发场景。
东溪陈姓少年
2020/08/06
6790
Spring Data Rest!五分钟帮我们实现Rest服务
一直认为,Spring Data是与第三方组件进行数据交换的全家桶的整合,比如Spring Data Jpa是数据库使用,Spring Data LDAP是LDAP的使用,Spring Data Redis是Redis的使用,Spring Data Elasticsearch是Elasticsearch的使用。
品茗IT
2020/05/28
3.3K0
让 Restful API 更加 Simpler:Spring Data Rest
Spring Data REST 作为 Spring Data 项目的子集,开发者只需使用注解 @RepositoryRestResource 标记,就可以把整个 Repository 转换为 HAL 风格的 REST 资源,目前已支持 Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j等等。
happyJared
2019/04/18
1.6K0
让 Restful API 更加 Simpler:Spring Data Rest
Spring Boot 构建多租户SaaS平台核心技术指南
笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台;并一直从事相关领域的架构设计及研发工作。机缘巧合,在笔者本科毕业设计时完成了一个基于SaaS的高效财务管理平台的课题研究,从中收获颇多。最早接触SaaS时,国内相关资源匮乏,唯一有的参照资料是《互联网时代的软件革命:SaaS架构设计》(叶伟等著)一书。最后课题的实现是基于OSGI(Open Service Gateway Initiative)Java动态模块化系统规范来实现的。
JAVA葵花宝典
2020/03/10
2.7K0
Spring Boot 构建多租户SaaS平台核心技术指南
使用 spring data rest 快速构建 restful api,再也不用加班了
REST是一种设计风格(与具体的语言无关),它的URL主体是资源,是个名词。而且也仅支持HTTP协议,规定了使用HTTP Method表达本次要做的动作,类型一般也不超过那四五种。这些动作表达了对资源仅有的几种转化方式。
双鬼带单
2018/08/01
5.1K0
使用 spring data rest 快速构建 restful api,再也不用加班了
SpringBoot使用Spring Data REST快速构建restful应用
REST Web服务已经成为Web上应用程序集成的第一大手段。 REST的核心是定义一个包含与客户端进行交互资源的系统。 这些资源以超媒体驱动的方式实现。
烂猪皮
2023/09/04
4270
SpringBoot使用Spring Data REST快速构建restful应用
springboot2.X 使用spring-data组件对MongoDB做CURD
基于快速开发,需求不稳定的情况, 我决定使用MongoDB作为存储数据库,搭配使用spring-data
suveng
2019/09/17
2.1K0
如何在 Spring Boot 中实现操作日志系统
在开发企业级应用时,记录用户操作日志是非常重要的。这不仅能帮助开发者监控系统的行为,还能在出现问题时进行追踪。在这篇文章中,我们将介绍如何在Spring Boot中开发一个完整的日志系统,记录每一步操作,如登录、创建订单、删除、查询等。
Swift社区
2024/07/02
3020
如何在 Spring Boot 中实现操作日志系统
三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合
在快节奏的软件开发领域,每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗?这篇文章将是你的首选攻略。在这里,我们将向你展示如何将 Spring Boot 的便捷性、JPA 的强大查询能力和 SQLite 的轻量级特性结合在一起,实现快速而又优雅的数据管理。
未读代码
2024/03/04
9700
三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合
使用Spring Boot实现博客管理系统
博客管理系统在内容创作和分享中扮演着重要角色。它能够帮助用户方便地发布、编辑、管理和分享博客文章。Spring Boot通过其简便的配置和强大的功能支持,使得开发一个高效的博客管理系统变得非常容易。本文将详细探讨如何使用Spring Boot实现一个博客管理系统,并提供具体的代码示例和应用案例。
E绵绵
2024/07/03
2460
关于Spring Boot你不得不知道的事--Spring Boot的基本操作
表示当前pom文件从spring-boot-starter-parent继承下来,在spring-boot-starter-parent中提供了很多默认配置,可以简化我们的开发。
Java架构
2019/06/21
9710
关于Spring Boot你不得不知道的事--Spring Boot的基本操作
Spring认证中国教育管理中心-Spring Data REST框架教程一
原标题:Spring认证中国教育管理中心-Spring Data REST框架教程一(Spring中国教育管理中心)
IT胶囊
2021/12/09
1.7K0
Spring认证中国教育管理中心-Spring Data REST框架教程一
从零搭建Spring Boot脚手架(2):增加通用的功能
上一篇说了我要一步步地搭建Spring Boot脚手架,首先会集成Spring MVC并进行定制化以满足日常开发的需要,我们先做一些刚性的需求定制,后续再补充细节。如果你看了本文有什么问题可以留言讨论。多多持续关注,共同学习,共同进步。
码农小胖哥
2020/08/04
6920
从零搭建Spring Boot脚手架(2):增加通用的功能
<译文>使用Spring Boot 2.0,Prometheus和Grafana进行监视(第1部分-REST API)
在第1部分中,我们将使用Spring Boot 2.0,JPA,H2数据库和SWAGGER UI创建文档,从而为CRUD操作创建REST API。
东风微鸣
2022/04/21
9580
<译文>使用Spring Boot 2.0,Prometheus和Grafana进行监视(第1部分-REST API)
Spring 全家桶之 Spring Data JPA(四)
只配置了客户到联系人的关系,查看执行的SQL,相比上一次测试多了一条update外键的sql语句
RiemannHypothesis
2022/08/19
1.6K0
Spring 全家桶之 Spring Data JPA(四)
Spring 全家桶之 Spring Data JPA(二)
&emsp;&emsp;Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦
RiemannHypothesis
2022/08/19
1.3K0
Spring 全家桶之 Spring Data JPA(二)
Spring与SpringBoot整合Spring Data JPA及使用
Spring Data JPA是Spring Data项目下的一个模块。提供了一套基于JPA标准操作数据库的简化方案,底层默认是依赖Hibernate JPA来实现的。
害恶细君
2022/11/22
4.5K0
Spring与SpringBoot整合Spring Data JPA及使用
Spring Data MongoDB问题汇总
Spring Data除了常用的JPA(Hibernate)关系型数据库的模块外,还有其他用于非关系型数据库的数据交互模块:比如Redis、MongoDB、Elasticsearch等。
雨临Lewis
2022/01/12
2K0
Spring Boot REST API错误处理指南
本来是5号来的文章,无奈最近准备换工作,一直拖着没写,今天搜索偶然看见有人已经翻译完了,由于时间原因这次就直接转载下吧,现附上英文原文及相关信息,最后再附上译文原文:
WindCoder
2018/09/19
3.3K0
Spring Boot REST API错误处理指南
推荐阅读
相关推荐
Spring Data REST不完全指南(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文