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请求,搭建起来试试把,这里我就不再进行测试了。

相关文章
|
1月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
1562 54
|
3月前
|
JSON 人工智能 Java
基于Spring AI构建智能Text-to-SQL转换器:一个完整的MCP
Spring AI 更新结构化输出转换器,弃用旧版 Parser 类,引入与 Spring 框架对齐的 Converter 体系,提升命名规范与功能兼容性。新版本支持 JSON、XML 及 Java 对象转换,确保 LLM 输出结构化,便于下游应用处理。
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
677 3
|
2月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1393 58
|
1月前
|
缓存 监控 Java
《深入理解Spring》性能监控与优化——构建高性能应用的艺术
本文系统介绍了Spring生态下的性能监控与优化实践,涵盖监控体系构建、数据库调优、缓存策略、线程池配置及性能测试等内容,强调通过数据驱动、分层优化和持续迭代提升应用性能。
|
1月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
2月前
|
XML Java 测试技术
使用 Spring 的 @Import 和 @ImportResource 注解构建模块化应用程序
本文介绍了Spring框架中的两个重要注解`@Import`和`@ImportResource`,它们在模块化开发中起着关键作用。文章详细分析了这两个注解的功能、使用场景及最佳实践,帮助开发者构建更清晰、可维护和可扩展的Java应用程序。
217 0
|
5月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
|
5月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
8月前
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
下一篇
oss云网关配置