Spring Boot(十一)Spring Boot中使用REST资源输出

关注公众号【程序职场】,专注于 Spring Boot+微服务,小程序,flutter,Android,定期文章和视频教程分享,关注后回复   Java资料 ,领取为你精心准备的 学习 干货!

大家好,我是“追梦蜗牛”,大家可以在公众号后台回复 “Java资料”获得技能提升的资料,绝对是干货。

本文是Spring Boot系列的第十篇,了解前面的文章有助于更好的理解本文:


1.Spring Boot(一)初识Spring Boot框架
2.Spring Boot(二)Spring Boot基本配置
3.Spring Boot(三)Spring Boot自动配置的原理
4.Spring Boot(四)Spring Boot web项目开发
5.Spring Boot(五)Spring Boot web开发项目(2)配置
6.Spring Boot(六)Spring Boot web开发 SSL配置
7.Spring Boot(七)Spring Boot Websocket
8.Spring Boot(八)Spring Boot Websocket实现聊天功能
9.Spring Boot(九)Spring Boot Bootstrap和AngularJS的使用
10.Spring Boot(十)Spring Boot中使用JPA


前言

(一). REST的介绍

(二). Spring Boot的职场

(三). 案例实战

上篇文章为大家讲述了 Spring Boot中 使用JPA;本篇文章接着上篇内容继续为大家介绍SpringBoot中 REST服务的使用。

(一). REST的介绍

Spring Data REST本身就是一个Spring MVC应用程序,它的设计方式应该是尽可能少的集成到现有的Spring MVC应用程序中。现有的(或将来的)服务层可以与Spring Data REST一起运行,只有较小的考虑

Spring Data JPA是基于 Spring Data 的repository 之上,可以将repository自动输出为REST资源,目前Spring Data REST支持将Spring Data JPA,MongoDB,Neo4j,GemFire以及Cassandra的repository自动转换成REST服务。

(二). Spring Boot的支持

上面介绍了这么多,那么 Spring Boot这么支持REST呢?
Spring Boot对Spring Data REST的自动配置放置在Rest中,Spring Boot 已经为我们自动配置了 RepositoryRestConfigurition 所以使用REST只需要引入 spring -boot -starter-data-rest的依赖,无需做任何配置。

Spring Boot 通过在application.properties中配置以 spring.data.rest 为前缀的属性来配置RepositoryRestConfiguration ,例如:

spring.data.rest.base-path:java.net.URIspring.data.rest.default-page-sizespring.data.rest.linit-param-namespring.data.rest.max-page-sizespring.data.rest.page-param-namespring.data.rest.return-body-on-createspring.data.rest.return-body-on-update


(三). 案例实战

上面说了REST和在SpringBoot中的支持,下面我们说一下 这么使用
 

1. 创建项目
创建Spring Boot项目,依赖JPA和REST.

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1uploading.gif正在上传…重新上传取消

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1uploading.gif正在上传…重新上传取消


2. 添加数据库有关配置

我们这里还和上一篇 jpa的使用一样,我们使用 mysql数据库。需要添加 数据库的依赖:
 

   <dependency>
 <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>5.1.40</version></dependency>

还需要在 application.properties中添加 数据库的属性配置
 

spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springbootrest?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=root
spring.jpa.hibernate.ddl-auto=updatespring.jpa.show-sql=truespring.jackson.serialization.indent_output=true

属性信息 可以参考上一篇文章的说明.

3. 创建实体类
 

@Entitypublic class Person {    @Id    @GeneratedValue    private Long id;    private String name;    private Integer age;    private String address;
    public Person() {    }
    public Long getId() {        return id;    }
    public void setId(Long id) {        this.id = id;    }
    public String getName() {        return name;    }
    public void setName(String name) {        this.name = name;    }
    public Integer getAge() {        return age;    }
    public void setAge(Integer age) {        this.age = age;    }
    public String getAddress() {        return address;    }
    public void setAddress(String address) {        this.address = address;    }
    public Person(Long id, String name, Integer age, String address) {        this.id = id;        this.name = name;        this.age = age;        this.address = address;    }}

4. 创建实体类 Repository

public interface PersonRepository extends JpaRepository<Person,Long> {    List<Person> findByNameStartsWith(@Param("name") String name);}

实体类中添加了一个 findByNameStartswith 方法.

上面的几步 我们基本完成了使用前准备,有些小伙伴可能还很疑惑,这样怎么看结果使用呢?

当然还需要 测试工具的安装和使用。

5. 测试工具的安装

这里我们需要用到Postman ,它是一个支持REST的客户端,我们用它来测试我们的REST资源。

postman 有很多种,有浏览器中的插件形式的,还有客户端的,这里我们使用客户端来测试,按照文件 我已经放在 项目目录下。小伙伴可以自行下载,安装,使用。

#安装postman

在项目目录下找到改文件,双击安装就行了,很简单的操作。

安装后 会自动打开 一个客户端,界面如下:
 

好了,工具安装好了,小伙伴们 我们来做几个测试,大家就明白了,怎么使用了.

#获得全部数据

在Postman中使用GET访问http://localhost:8080/persons 获取列表数据:效果如下:

细心的小伙伴 这里可以有些疑问,说数据怎么来的呢

关于数据的来源,我们这里添加一个 测试类,在测试类中 通过生成sql 添加数据进入数据库:
 

package org.myyoung.cxzc.springboot_rest;import java.util.Random;public class Test {    public static void main(String[] args) {        String[] addrss = new String[]{"西安", "北京", "郑州", "上海", "武汉", "长沙", "广州", "贵阳", "柳州", "咸阳", "蓝田", "渭南"};        String[] names1 = new String[]{"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈"};        String[] names2 = new String[]{"强", "亚", "哲", "凡", "路", "举", "昕", "科", "武", "田"};        Random random = new Random();        for (int i = 0; i < 100; i++) {            System.out.println("insert into person(id,address,name,age) values("+i+",'" + addrss[random.nextInt(addrss.length)] + "','" + names1[random.nextInt(names1.length)]+ names2[random.nextInt(names2.length)] + "','" + (20 + random.nextInt(70)) + "');");        }    }    //生成后 添加到 数据库中}

生成数据如下:
 

insert into person(id,address,name,age) values(0,'蓝田','李路','51');insert into person(id,address,name,age) values(1,'柳州','王哲','77');insert into person(id,address,name,age) values(2,'武汉','李亚','81');insert into person(id,address,name,age) values(3,'郑州','赵哲','24');insert into person(id,address,name,age) values(4,'北京','郑亚','53');insert into person(id,address,name,age) values(5,'上海','孙武','37');insert into person(id,address,name,age) values(6,'郑州','李举','57');insert into person(id,address,name,age) values(7,'西安','钱亚','29');insert into person(id,address,name,age) values(8,'武汉','孙武','82');insert into person(id,address,name,age) values(9,'广州','郑路','74');insert into person(id,address,name,age) values(10,'广州','周昕','87');insert into person(id,address,name,age) values(11,'柳州','王哲','72');insert into person(id,address,name,age) values(12,'西安','钱昕','83');insert into person(id,address,name,age) values(13,'郑州','冯举','54');insert into person(id,address,name,age) values(14,'咸阳','王凡','88');

小伙伴 可以直接导入数据库。

上面我们打断了一下  说了一下添加数据,下面我们继续学习使用 postman

#获取单一对象
访问http://localhost:8080/persons/1 获得Id为1的对象,

#查询
在上面的自定义实体类 Repository中定义了findByNameStartsWith方法,若想此方法也暴露为REST资源,需要修改如下:
 

package org.myyoung.cxzc.springboot_rest;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.repository.query.Param;import org.springframework.data.rest.core.annotation.RestResource;import java.util.List;
public interface PersonRepository extends JpaRepository<Person,Long> {    @RestResource(path = "nameStartsWith",rel = "nameStartsWith")    List<Person> findByNameStartsWith(@Param("name") String name);}

在postman中访问 http://localhost:8080/persons/search/nameStartsWith?name=陈 可以实现查询操作:

#分页查询

postman中使用get访问 http://localhost:8080/persons/?page=1&size=2
说明:page是页码  size是页面大小


#排序查询
postman中使用get 访问 http://localhost:8080/persons/?sort=age,desc
按照 age属性倒序


#保存
向http://localhost:8080/persons 发起post请求,将我们需要保存的数据放置在请求体中,数据类型设置为json 格式如下

{"name":"cc","address":"西安","age":24}


#删除
我们删除一条数据 id是10的数据  使用 delete 方式访问http://localhost:8080/persons/10
 

删除成功后 再次查询,提示 404NotFound 说明资源不存在,已经删除了

最后我们来说一下 定制
1. 定制跟路径
如果我们需要定制根路径的话 只需要在 application.properties中添加定义即可

spring.data.rest.base-path=/api

测试我们访问REST资源的路径就成了   http://localhost:8080/api/persons

2. 定制节点路径

当然我们还可以定制节点路径:例如 上面的 实体类 Repository上使用的@RepositoryRestResource注解的path属性进行修改,代码如下:

package org.myyoung.cxzc.springboot_rest;
import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.repository.query.Param;import org.springframework.data.rest.core.annotation.RestResource;
import java.util.List;@RepositoryRestResource(path="people")public interface PersonRepository extends JpaRepository<Person,Long> {    @RestResource(path = "nameStartsWith",rel = "nameStartsWith")    List<Person> findByNameStartsWith(@Param("name") String name);}


此时我们访问REST服务的地址变成 

http://localhost:8080/api/people
 

ok,本篇内容到这里就完成了,如果小伙伴还有疑问,可以 关注 公众号 加群,我们一起进步

参考:
1. 《JavaEE开发的颠覆者 Spring Boot实战》

本案例下载地址:

https://github.com/ProceduralZC/itcxzc/tree/master/springboot_rest

关注公众号【程序职场】,专注于 Spring Boot+微服务,小程序,flutter,Android,定期文章和视频教程分享,关注后回复   Java资料 ,领取为你精心准备的 学习 干货!

发布了55 篇原创文章 · 获赞 101 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/jianpengxuexikaifa/article/details/102761086