千家信息网

构建RESTful服务(使用Spring Data JPA)

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一.Restful简介REST是一种Web软件结构风格,而不是一种标准,匹配或兼容这种架构风格称之为REST服务,REST服务简洁并且有层次,REST通常基于HTTP,URI和XML以及HTML这些现
千家信息网最后更新 2026年11月01日构建RESTful服务(使用Spring Data JPA)

一.Restful简介
REST是一种Web软件结构风格,而不是一种标准,匹配或兼容这种架构风格称之为REST服务,REST服务简洁并且有层次,REST通常基于HTTP,URI和XML以及HTML这些现有的广泛流行的协议和标准,在REST中,资源是由URI来指定的,对资源的增删改查也是通过HTTP协议提供的POST,PUT,GET,DELETE等方法实现,使用REST可以更高效率的利用缓存来提高响应速度,同时REST中的通信会话状态有客户端来维护,这可以让不同服务器来处理一系列请求中的不同请求,进而提高服务器的扩展性,在前后端分离项目中,一个好的项目必然遵循REST架构风格
在Spring Mvc框架中,开发者可以提供RestController注解开发一个RESTful服务,不过Spring Boot对此提供了自动化配置方案,开发者只需要添加相关依赖即可快速构建一个RESTful服务
二.JPA实现REST
在Spring Boot中使用Spring Data JPA和Spring Data Rest可以快速开发一个RESTful服务。
1.基本实现
(1)创建项目:创建Spring Boot项目,添加如下依赖

            org.springframework.boot            spring-boot-starter-data-jpa                            org.springframework.boot            spring-boot-starter-data-rest                            org.springframework.boot            spring-boot-starter-web                            mysql            mysql-connector-java            runtime                            com.alibaba            druid            1.1.10                                     org.projectlombok            lombok            true         

(2)这里的依赖除了添加了数据库相关依赖外还有Spring Data Jpa以及Spring Data Rest的依赖,项目建成后,接下来在配置文件中进行配置,配置如下:

server.port=8088spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.url=jdbc:mysql://localhost:3306/spring_vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=falsespring.datasource.username=rootspring.datasource.password=********spring.jpa.hibernate.ddl-auto=updatespring.jpa.database=mysqlspring.jpa.show-sql=truespring.jpa.open-in-view=truespring.jpa.properties.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

2.创建实体类

@Entity@Data@Table(name = "book")public class Book {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "id")    private Integer id;    @Column(name = "name")    private String name;    @Column(name = "author")    private String author;    @Column(name = "price")    private float price;}

3.创建BookRepository

public interface BookRepository extends JpaRepository, JpaSpecificationExecutor{}

(3)这里继承了JpaRepository,JpaSpecificationExecutor,在JpaRepository中包含了很多现成的增删改查的方法
4.测试
经过上面的步骤,简单的RESTful架构就已经完成了,接下来进行测试:
(1)添加测试,这里我们使用的Postman,RESTful构建成功后,默认的请求路径是实体类名小名加上s,向数据库添加一条数据很容易,发起一个post请求,并写入要添加的数据即可,这里数据以JSON格式为准,如下:

总结:路径:localhost:8088/books,格式:JSON,请求类型:post
(2)分页查询测试,查询是Get请求,分页查询请求路径实体类小写加s,这里为/books,分页查询的每页默认记录数为20条,页数是0,测试如下:

总结:请求类型GET,无参数,路径:localhost:8088/books
(3)根据id查询,若是根据id进行查询,只需要路径后边缀id即可,路径如下:

总结:路径:localhost:8088/books/4,类型:GET
(4)分页查询扩展,添加查询页数,条数,以及添加排序,也是只需要后缀参数即可

总结:路径:localhost:8088/books?page=1&size=3,请求类型:GET
除了分页以外还可以添加排序,如下:

总结:路径:localhost:8088/books?page=1&size=3&sort=id,desc,类型:GET
(5)修改测试,修改需要发送PUT请求,因为修改是根据id进行的,因此路径中需加入id,然后传入修改数据(JSON格式),如下:

总结:路径:localhost:8088/books/15,请求参数图中所示,请求类型:PUT
(6)删除测试,使用DELETE请求可以实现对数据的删除操作,例如删除id为1的记录,路由如下:localhost:8088/books/11
5.自定义请求路径
默认情况下,请求路径都是实体类名加s,如果开发者想对路径进行重定义,通过@RepositoryResource注解可实现

@RepositoryRestResource(path="bs",collectionResourceRel="bs",itemResourceRel="bs")public interface BookRepository extends JpaRepository, JpaSpecificationExecutor{}

代码解释:@RepositoryResource注解的path属性表示将所有请求路径中的books都修改为bs(localhost:8088/bs),collectionResourceRel表示将返回的JSON集合中book集合的key修改为bs,itemResourceRel表示将返回的JSON集合中单个book的key修改为b

6.自定义查询方法
默认的查询方法支持分页查询,排序查询以及按照id查询,如果开发者想要按照某个属性查询,只需要在BookRepository中定义相关方法并暴露出去即可,代码如下:

@RepositoryRestResource(path = "bs")public interface BookRepository extends JpaRepository, JpaSpecificationExecutor {    @RestResource(path = "author", rel = "author")    public List findByAuthor(@Param("author") String author);}

代码解释:
自定义查询只需要在BookRepository中定义查询方法即可,方法定义好之后可以不添加@RestResource注解,默认路径就是方法名,以上述自定义方法为例,若是不添加@RestResource注解,则默认该方法调用路径为:localhost:8088/bs/search/findByAuthor?author=金庸,如果添加注解,对方法查询路径自定义,其中path就是最新路径,如上方法,他的访问路径为:localhost:8088/bs/search//author?author=金庸 ,如下:

注意:用户可以通过访问:localhost:8088/bs/search,查询目前都暴露了哪些查询方法

7.隐藏方法
(1)默认情况下,继承了Repository接口或是其子类的类都会被暴露出来,即开发者可以执行基本的增删改查方法,如果开发者不想暴露此接口类对对象的操作各种方法,那么就可以作如下配置:

@RepositoryRestResource(exported=false)public interface BookRepository extends JpaRepository, JpaSpecificationExecutor {}

这样此接口里边的所有方法都会失效
(2)若是只是不想暴露某一个方法,就可以在此方法上加注解@RestResource,在注解中设定exported=false,这样这个方法就会失效,如下:

@Override    @RestResource(exported=false)    void deleteById(Integer id);

8.配置CORS(跨域支持)
所有方法支持跨域访问,在接口上加@CrossOrigin注解如下:

@CrossOrigin@RepositoryRestResource(path = "bs")public interface BookRepository extends JpaRepository, JpaSpecificationExecutor {    @RestResource(path = "author", rel = "author")    public List findByAuthor(@Param("author") String author);}

(2)单某些方法支持跨域,在要支持的方法上加@CrossOrigin注解
9.其他配置
开发者可以为了方便开发添加常用属性,如下:

spring.data.rest.default-page-size=2spring.data.rest.page-param-name=pathspring.data.rest.sort-param-name=sortspring.data.rest.limit-param-name=sizespring.data.rest.base-path=/apispring.data.rest.return-body-on-create=truespring.data.rest.return-body-on-update=true
方法 路径 查询 注解 开发 服务 开发者 测试 配置 数据 类型 项目 支持 实体 接口 代码 参数 属性 架构 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 金融科技还是互联网 美国互联网科技巨头监管 关于新基建和互联网科技 中资互联网科技 九亚互联网科技 哈尔滨新华互联网科技 滨湖区互联网智能科技产品供应 宁波青枫互联网科技有限公司 浙南科技城互联网大厦建设工程 济南有互联网科技公司吗 互联网科技公司营业执照怎么办理 国大互联网教育科技有限公司薪资 电子商务与互联网科技的关系 上海互联网科技公司ppt 新氧科技和美国互联网有关系吗 宁波跨境商互联网科技有限公司 信承诺互联网科技有限公司 济南小医互联网科技有限公司招聘 互联网科技职业技能培训学校 互联网加科技 狮子座互联网科技 朗涯互联网科技 华中科技大学互联网 易通互联网络科技有限公司 深圳国际航运科技和互联网 河南猎农互联网科技有限公司 内蒙古九一互联网科技 南通创西澳互联网科技有限公司 唐山双旺合互联网科技产业园
0