前言

(一). 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.URI
spring.data.rest.default-page-size
spring.data.rest.linit-param-name
spring.data.rest.max-page-size
spring.data.rest.page-param-name
spring.data.rest.return-body-on-create
spring.data.rest.return-body-on-update

(三). 案例实战

 

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

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

 

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_02

正在上传…重新上传取消

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_REST_03

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_02

正在上传…重新上传取消

2. 添加数据库有关配置

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

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

 

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

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

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

 

3. 创建实体类
 

@Entity
public 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

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_05

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

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

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_06

 

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

 

#获得全部数据

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

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_REST_07

 

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

关于数据的来源,我们这里添加一个 测试类,在测试类中 通过生成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的对象,

 

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_08

 

#查询
在上面的自定义实体类 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属性倒序

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_spring_09

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

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


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

springBoot 设置 FastJsonRedisSerializer springBoot 设置resis_Data_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实战》