一、什么是Spring Data REST
Spring Data REST是基于Spring Data的repository之上,可以把 repository 自动输出为REST资源,目前支持Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j、Spring Data GemFire、Spring Data Cassandra的 repository 自动转换成REST服务。注意是自动。简单点说,Spring Data REST把我们需要编写的大量REST模版接口做了自动化实现.
二、restful api
REST是一种设计风格(与具体的语言无关),它的URL主体是资源,是个名词。而且也仅支持HTTP协议,规定了使用HTTP Method表达本次要做的动作,类型一般也不超过那四五种。这些动作表达了对资源仅有的几种转化方式。
常用的HTTP动词有下面五个(括号里是对应的SQL命令)。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
三、实现
Spring Boot 2.0.0.RELEASE
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
2、资源文件配置:
server.port=8888
#logging.file=G://mylog//log_1.log
#slogging.level.org.springframework.web=DEBUG
#datasource
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=sx96411
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.data=classpath:data.sql
#spring.datasource.initialization-mode:always
#jpa
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent-output=true
#Rest
spring.data.rest.base-path=/rest
配置访问资源的根路径:
spring.data.rest.base-path=/rest
3、Entity Bean:
package com.wisely.stuRest.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private Integer age;
private String address;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(Integer id, String name, Integer age, String address) {
super();
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
4、Repository文件:
package com.wisely.stuRest.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import com.wisely.stuRest.domain.Person;
@RepositoryRestResource(path="person")
public interface PersonRepository extends JpaRepository<Person, Integer> {
Person findByNameStartsWith(String name);
}
定制节点路径:
@RepositoryRestResource(path="person")
Spring Data Rest的默认规则是在实体类后加“s”来形成路径
5、访问:
get请求:
获取所有记录:http://localhost:8888/person/rest
获取 id 为 1 的记录:http://localhost:8888/person/rest/1
post请求:
发送json数据需要设置 Content-Type=application/json
否则会出现
如下异常:
No suitable HttpMessageConverter found to read request body into object of type class com.wisely.stuRest.domain.Person from request with content type of text/plain;charset=UTF-8!
使用FireFox RESTClient发送请求: