Spring Data JPA构建Restful服务应用Demo

简介: 昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。

Spring Data JPA构建Restful服务应用Demo

昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI

那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。

创建项目

pom.xml

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

创建完成后就可以在数据库properties文件中进行数据库的配置,数据库的配置和之前文章中讲的配置是一样的,大家可以参考一下我的这篇文章。包括其中的实体这两篇文章也是相同的

解读SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目实战

数据库

20200620164734140.jpg

创建BookRespository

这里和之前文章中讲到的整合JPA中的mapper类是相同的,这里可以什么内容都不写,只继承JpaRespository就可以实现对数据的增删改查操作,代码如下:

public interface BookDao extends JpaRepository<Book,Integer> {}

有人会说了,这样就可以了吗?给你看一下jpaRepository的源码,我也是第一次看哈

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();
    List<T> findAll(Sort var1);
    List<T> findAllById(Iterable<ID> var1);
    <S extends T> List<S> saveAll(Iterable<S> var1);
    void flush();
    <S extends T> S saveAndFlush(S var1);
    void deleteInBatch(Iterable<T> var1);
    void deleteAllInBatch();
    T getOne(ID var1);
    <S extends T> List<S> findAll(Example<S> var1);
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

经过上面几步我们就可以运行测试了,这里我们选择postMan来进行测试,这样看起来比较直观。


测试

RESTful服务创建成功之后,默认的请求路径是实体类名小写再加上后缀。

在测试的时候一定要以json的格式进行数据的交互,post默认的request请求形式是以test的形式,所以我们要改成application/json的形式,否则就会报错:


org.springframework.http.converter.HttpMessageNotReadableException异常

20200620165744690.jpg

改完之后就可以在body处进行json数据形式的编写

2020062017065188.jpg

返回的结果如下:

{
  "name": "SpringBoot开发实战",
  "author": "我",
  "price": 20.0,
  "description": "good",
  "_links": {
    "self": {
      "href": "http://localhost:8080/books/36"
    },
    "book": {
      "href": "http://localhost:8080/books/36"
    }
  }
}

表示成功增加一条数据信息,然后我们测试一下查询,查询就是把提交形式改成GET。

{
  "_embedded": {
    "books": [
      {
        "name": "呐喊",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/1"
          },
          "book": {
            "href": "http://localhost:8080/books/1"
          }
        }
      },
      {
        "name": "朝花夕拾",
        "author": "鲁迅1",
        "price": 24.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/2"
          },
          "book": {
            "href": "http://localhost:8080/books/2"
          }
        }
      },
      {
        "name": "简单生活学",
        "author": "鲁迅2",
        "price": 30.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/3"
          },
          "book": {
            "href": "http://localhost:8080/books/3"
          }
        }
      },
      {
        "name": "XML基础与案例教程",
        "author": "鲁迅3",
        "price": 31.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/4"
          },
          "book": {
            "href": "http://localhost:8080/books/4"
          }
        }
      },
      {
        "name": "物联网之源",
        "author": "鲁迅4",
        "price": 44.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/5"
          },
          "book": {
            "href": "http://localhost:8080/books/5"
          }
        }
      },
      {
        "name": "狂人日记",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/27"
          },
          "book": {
            "href": "http://localhost:8080/books/27"
          }
        }
      },
      {
        "name": "其他书籍",
        "author": "张闲闲",
        "price": null,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/29"
          },
          "book": {
            "href": "http://localhost:8080/books/29"
          }
        }
      },
      {
        "name": "java开发程序设计",
        "author": "张闲闲",
        "price": 80.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/32"
          },
          "book": {
            "href": "http://localhost:8080/books/32"
          }
        }
      },
      {
        "name": "狂人日记",
        "author": "鲁迅",
        "price": 23.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/33"
          },
          "book": {
            "href": "http://localhost:8080/books/33"
          }
        }
      },
      {
        "name": "SpringBoot开发实战",
        "author": "我",
        "price": 20.0,
        "description": null,
        "_links": {
          "self": {
            "href": "http://localhost:8080/books/36"
          },
          "book": {
            "href": "http://localhost:8080/books/36"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "http://localhost:8080/books"
    },
    "profile": {
      "href": "http://localhost:8080/profile/books"
    },
    "search": {
      "href": "http://localhost:8080/books/search"
    }
  },
  "page": {
    "size": 20,
    "totalElements": 10,
    "totalPages": 1,
    "number": 0
  }
}

会为我们自动返回一个paga信息,如果按照id来查询,在请求路径后面加上id就可以。如果是修改的话就把请求改成PUT形式,修改单条的话就在路径后面加上id,删除的话就是DELETE请求,搭建起来试试把,这里我就不再进行测试了。

相关文章
|
27天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
42 12
|
1月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
1月前
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
1月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
1月前
|
安全 测试技术 API
构建高效RESTful API:后端开发的艺术与实践####
在现代软件开发的浩瀚星空中,RESTful API如同一座桥梁,连接着前端世界的绚丽多彩与后端逻辑的深邃复杂。本文旨在探讨如何精心打造一款既高效又易于维护的RESTful API,通过深入浅出的方式,剖析其设计原则、实现技巧及最佳实践,为后端开发者提供一份实用的指南。我们不深入晦涩的理论,只聚焦于那些能够即刻提升API品质与开发效率的关键点,让你的API在众多服务中脱颖而出。 ####
34 0
|
Java Spring 数据库
Spring服务定制
问题总述 ​ 我们都知道如果使用Spring来进行bean管理的时候。如果同一个接口的实现类存在两个,直接使用@Autowired注解来实现bean注入,会在启动的时候报异常。我们通常的做法是使用@Resource注解来执行bean的名称。
899 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
247 2
|
6天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
13天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
60 14
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
52 1
SpringBoot入门(7)- 配置热部署devtools工具