亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

構建RESTful服務(使用Spring Data JPA)

發布時間:2020-08-01 00:24:06 來源:網絡 閱讀:3660 作者:墨營 欄目:軟件技術

一.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格式為準,如下:

構建RESTful服務(使用Spring Data JPA)

總結:路徑:localhost:8088/books,格式:JSON,請求類型:post
(2)分頁查詢測試,查詢是Get請求,分頁查詢請求路徑實體類小寫加s,這里為/books,分頁查詢的每頁默認記錄數為20條,頁數是0,測試如下:

構建RESTful服務(使用Spring Data JPA)

總結:請求類型GET,無參數,路徑:localhost:8088/books
(3)根據id查詢,若是根據id進行查詢,只需要路徑后邊綴id即可,路徑如下:

構建RESTful服務(使用Spring Data JPA)

總結:路徑:localhost:8088/books/4,類型:GET
(4)分頁查詢擴展,添加查詢頁數,條數,以及添加排序,也是只需要后綴參數即可
構建RESTful服務(使用Spring Data JPA)

總結:路徑:localhost:8088/books?page=1&size=3,請求類型:GET
除了分頁以外還可以添加排序,如下:

構建RESTful服務(使用Spring Data JPA)

總結:路徑:localhost:8088/books?page=1&size=3&sort=id,desc,類型:GET
(5)修改測試,修改需要發送PUT請求,因為修改是根據id進行的,因此路徑中需加入id,然后傳入修改數據(JSON格式),如下:
構建RESTful服務(使用Spring Data JPA)

總結:路徑: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

構建RESTful服務(使用Spring Data JPA)

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=金庸 ,如下:

構建RESTful服務(使用Spring Data JPA)

注意:用戶可以通過訪問: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
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安塞县| 通河县| 鄂托克旗| 肥东县| 阳江市| 治县。| 潼关县| 灵丘县| 皮山县| 彩票| 威远县| 蒙自县| 永嘉县| 宣武区| 南华县| 宁波市| 阜平县| 弥渡县| 五大连池市| 称多县| 兴城市| 通江县| 乳源| 绥棱县| 德庆县| 关岭| 凤山市| 社旗县| 蒙阴县| 山丹县| 乃东县| 黔南| 吉木乃县| 垣曲县| 观塘区| 景洪市| 株洲市| 乡宁县| 丁青县| 建湖县| 萨迦县|