您好,登錄后才能下訂單哦!
一.Restful簡介
REST是一種Web軟件結構風格,而不是一種標準,匹配或兼容這種架構風格稱之為REST服務,REST服務簡潔并且有層次,REST通常基于HTTP,URI和XML以及HTML這些現有的廣泛流行的協議和標準,在REST中,資源是由URI來指定的,對資源的增刪改查也是通過HTTP協議提供的POST,PUT,GET,DELETE等方法實現,使用REST可以更高效率的利用緩存來提高響應速度,同時REST中的通信會話狀態有客戶端來維護,這可以讓不同服務器來處理一系列請求中的不同請求,進而提高服務器的擴展性,在前后端分離項目中,一個好的項目必然遵循REST架構風格
在Spring Mvc框架中,開發者可以提供RestController注解開發一個RESTful服務,不過Spring Boot對此提供了自動化配置方案,開發者只需要添加相關依賴即可快速構建一個RESTful服務
二.JPA實現REST
在Spring Boot中使用Spring Data JPA和Spring Data Rest可以快速開發一個RESTful服務。
1.基本實現
(1)創建項目:創建Spring Boot項目,添加如下依賴
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
(2)這里的依賴除了添加了數據庫相關依賴外還有Spring Data Jpa以及Spring Data Rest的依賴,項目建成后,接下來在配置文件中進行配置,配置如下:
server.port=8088
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/spring_vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=********
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.open-in-view=true
spring.jpa.properties.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
2.創建實體類
@Entity
@Data
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "author")
private String author;
@Column(name = "price")
private float price;
}
3.創建BookRepository
public interface BookRepository extends JpaRepository<Book, Integer>, JpaSpecificationExecutor{
}
(3)這里繼承了JpaRepository,JpaSpecificationExecutor,在JpaRepository中包含了很多現成的增刪改查的方法
4.測試
經過上面的步驟,簡單的RESTful架構就已經完成了,接下來進行測試:
(1)添加測試,這里我們使用的Postman,RESTful構建成功后,默認的請求路徑是實體類名小名加上s,向數據庫添加一條數據很容易,發起一個post請求,并寫入要添加的數據即可,這里數據以JSON格式為準,如下:
總結:路徑:localhost:8088/books,格式:JSON,請求類型:post
(2)分頁查詢測試,查詢是Get請求,分頁查詢請求路徑實體類小寫加s,這里為/books,分頁查詢的每頁默認記錄數為20條,頁數是0,測試如下:
總結:請求類型GET,無參數,路徑:localhost:8088/books
(3)根據id查詢,若是根據id進行查詢,只需要路徑后邊綴id即可,路徑如下:
總結:路徑:localhost:8088/books/4,類型:GET
(4)分頁查詢擴展,添加查詢頁數,條數,以及添加排序,也是只需要后綴參數即可
總結:路徑:localhost:8088/books?page=1&size=3,請求類型:GET
除了分頁以外還可以添加排序,如下:
總結:路徑:localhost:8088/books?page=1&size=3&sort=id,desc,類型:GET
(5)修改測試,修改需要發送PUT請求,因為修改是根據id進行的,因此路徑中需加入id,然后傳入修改數據(JSON格式),如下:
總結:路徑:localhost:8088/books/15,請求參數圖中所示,請求類型:PUT
(6)刪除測試,使用DELETE請求可以實現對數據的刪除操作,例如刪除id為1的記錄,路由如下:localhost:8088/books/11
5.自定義請求路徑
默認情況下,請求路徑都是實體類名加s,如果開發者想對路徑進行重定義,通過@RepositoryResource注解可實現
@RepositoryRestResource(path="bs",collectionResourceRel="bs",itemResourceRel="bs")
public interface BookRepository extends JpaRepository<Book, Integer>, JpaSpecificationExecutor{
}
代碼解釋:@RepositoryResource注解的path屬性表示將所有請求路徑中的books都修改為bs(localhost:8088/bs),collectionResourceRel表示將返回的JSON集合中book集合的key修改為bs,itemResourceRel表示將返回的JSON集合中單個book的key修改為b
6.自定義查詢方法
默認的查詢方法支持分頁查詢,排序查詢以及按照id查詢,如果開發者想要按照某個屬性查詢,只需要在BookRepository中定義相關方法并暴露出去即可,代碼如下:
@RepositoryRestResource(path = "bs")
public interface BookRepository extends JpaRepository<Book, Integer>, JpaSpecificationExecutor {
@RestResource(path = "author", rel = "author")
public List<Book> findByAuthor(@Param("author") String author);
}
代碼解釋:
自定義查詢只需要在BookRepository中定義查詢方法即可,方法定義好之后可以不添加@RestResource注解,默認路徑就是方法名,以上述自定義方法為例,若是不添加@RestResource注解,則默認該方法調用路徑為:localhost:8088/bs/search/findByAuthor?author=金庸,如果添加注解,對方法查詢路徑自定義,其中path就是最新路徑,如上方法,他的訪問路徑為:localhost:8088/bs/search//author?author=金庸 ,如下:
注意:用戶可以通過訪問:localhost:8088/bs/search,查詢目前都暴露了哪些查詢方法
7.隱藏方法
(1)默認情況下,繼承了Repository接口或是其子類的類都會被暴露出來,即開發者可以執行基本的增刪改查方法,如果開發者不想暴露此接口類對對象的操作各種方法,那么就可以作如下配置:
@RepositoryRestResource(exported=false)
public interface BookRepository extends JpaRepository<Book, Integer>, JpaSpecificationExecutor {
}
這樣此接口里邊的所有方法都會失效
(2)若是只是不想暴露某一個方法,就可以在此方法上加注解@RestResource,在注解中設定exported=false,這樣這個方法就會失效,如下:
@Override
@RestResource(exported=false)
void deleteById(Integer id);
8.配置CORS(跨域支持)
所有方法支持跨域訪問,在接口上加@CrossOrigin注解如下:
@CrossOrigin
@RepositoryRestResource(path = "bs")
public interface BookRepository extends JpaRepository<Book, Integer>, JpaSpecificationExecutor {
@RestResource(path = "author", rel = "author")
public List<Book> findByAuthor(@Param("author") String author);
}
(2)單某些方法支持跨域,在要支持的方法上加@CrossOrigin注解
9.其他配置
開發者可以為了方便開發添加常用屬性,如下:
spring.data.rest.default-page-size=2
spring.data.rest.page-param-name=path
spring.data.rest.sort-param-name=sort
spring.data.rest.limit-param-name=size
spring.data.rest.base-path=/api
spring.data.rest.return-body-on-create=true
spring.data.rest.return-body-on-update=true
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。