Spring Boot構建 RESTful 風格應用



相關內容原文地址:

江南一點雨:Spring Boot 中 10 行代碼構建 RESTful 風格應用



1.Spring Boot構建 RESTful 風格應用

SpringMVC 對於 RESTful 提供了很好的支持,常見的相關注解有:

@RestController
@GetMapping
@PutMapping
@PostMapping
@DeleteMapping
@ResponseBody
...

Spring Boot 繼承自 Spring + SpringMVC, SpringMVC 中對於 RESTful 支持的特性在 Spring Boot 中全盤接收,同時,結合 Jpa 和 自動化配置,對於 RESTful 還提供了更多的支持,使得開發者幾乎不需要寫代碼(很少幾行),就能快速實現一個 RESTful 風格的增刪改查。

1.1 實戰

1.1.1 創建工程

創建一個 Spring Boot 工程,引入 Web 、 Jpa 、 MySQL 、Rest Repositories 依賴:
在這裏插入圖片描述
創建完成後,還需要鎖定 MySQL 驅動的版本以及加入 Druid 數據庫連接池,完整依賴如下:

<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-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
        <version>5.1.27</version>
    </dependency>
</dependencies>

配置數據庫:
主要配置兩個,一個是數據庫,另一個是 Jpa:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql:///test01
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=mysql
spring.jpa.database=mysql

前面五行配置了數據庫的基本信息,包括數據庫連接池、數據庫用戶名、數據庫密碼、數據庫連接地址以及數據庫驅動名稱。

接下來的五行配置了 JPA 的基本信息,分別表示生成 SQL 的方言、打印出生成的 SQL 、每次啓動項目時根據實際情況選擇是否更新表、數據庫平臺是 MySQL。

1.1.2 構建實體類

@Entity(name = "t_book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "book_name")
    private String name;
    private String author;
    //省略 getter/setter
}
public interface BookRepository extends JpaRepository<Book,Long> {
}

這裏一個是配置了一個實體類 Book,另一個則是配置了一個 BookRepository ,項目啓動成功後,框架會根據 Book 類的定義,在數據庫中自動創建相應的表,BookRepository 接口則是繼承自 JpaRepository ,JpaRepository 中自帶了一些基本的增刪改查方法。

1.1.4 查詢定製

public interface BookRepository extends JpaRepository<Book,Long> {
    List<Book> findBookByAuthorContaining(@Param("author") String author);
}

方法的定義,參數要有 @Param 註解。
定製完成後,重啓項目,此時就多了一個查詢接口,開發者可以通過 http://localhost:8080/books/search 來查看和 book 相關的自定義接口都有哪些:
在這裏插入圖片描述
查詢結果表示,只有一個自定義接口,接口名就是方法名,而且查詢結果還給出了接口調用的示例。我們來嘗試調用一下自己定義的查詢接口:
在這裏插入圖片描述
自定義接口名:

public interface BookRepository extends JpaRepository<Book, Long> {
    @RestResource(rel = "byauthor",path = "byauthor")
    List<Book> findBookByAuthorContaining(@Param("author") String author);
}

@RestResource 註解中,兩個參數的含義:

  • rel 表示接口查詢中,這個方法的 key
  • path 表示請求路徑

這樣定義完成後,表示接口名爲 byauthor ,重啓項目,繼續查詢接口:
在這裏插入圖片描述
除了 rel 和 path 兩個屬性之外,@RestResource 中還有一個屬性,exported 表示是否暴露接口,默認爲 true ,表示暴露接口,即方法可以在前端調用,如果僅僅只是想定義一個方法,不需要在前端調用這個方法,可以設置 exported 屬性爲 false 。

如果不想暴露官方定義好的方法,例如根據 id 刪除數據,只需要在自定義接口中重寫該方法,然後在該方法上加 @RestResource 註解並且配置相關屬性即可。

public interface BookRepository extends JpaRepository<Book, Long> {
    @RestResource(rel = "byauthor",path = "byauthor")
    List<Book> findBookByAuthorContaining(@Param("author") String author);
    @Override
    @RestResource(exported = false)
    void deleteById(Long aLong);
}

另外生成的 JSON 字符串中的集合名和單個 item 的名字都是可以自定義的:

@RepositoryRestResource(collectionResourceRel = "bs",itemResourceRel = "b",path = "bs")
public interface BookRepository extends JpaRepository<Book, Long> {
    @RestResource(rel = "byauthor",path = "byauthor")
    List<Book> findBookByAuthorContaining(@Param("author") String author);
    @Override
    @RestResource(exported = false)
    void deleteById(Long aLong);
}

path 屬性表示請求路徑,請求路徑默認是類名首字母小寫+s,可以在這裏自己重新定義。
在這裏插入圖片描述

1.1.5 其他配置

也可以在 application.properties 中配置 REST 基本參數:

spring.data.rest.base-path=/api
spring.data.rest.sort-param-name=sort
spring.data.rest.page-param-name=page
spring.data.rest.limit-param-name=size
spring.data.rest.max-page-size=20
spring.data.rest.default-page-size=0
spring.data.rest.return-body-on-update=true
spring.data.rest.return-body-on-create=true
  1. 給所有的接口添加統一的前綴
  2. 配置排序參數的 key ,默認是 sort
  3. 配置分頁查詢時頁碼的 key,默認是 page
  4. 配置分頁查詢時每頁查詢頁數的 key,默認是size
  5. 配置每頁最大查詢記錄數,默認是 20 條
  6. 分頁查詢時默認的頁碼
  7. 更新成功時是否返回更新記錄
  8. 添加成功時是否返回添加記錄
發佈了399 篇原創文章 · 獲贊 225 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章