基于Spring的響應(yīng)RESTful Web服務(wù)指南_第1頁
基于Spring的響應(yīng)RESTful Web服務(wù)指南_第2頁
基于Spring的響應(yīng)RESTful Web服務(wù)指南_第3頁
基于Spring的響應(yīng)RESTful Web服務(wù)指南_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1基于Spring的響應(yīng)RESTful Web 服務(wù)指南 PAGE 5使用 Spring WebFlux、SpringData 和MongoDB 創(chuàng)建一個響應(yīng)的 RESTful Web 服務(wù)了解如何在本教程中為 Spring WebFlux、Spring Data 和 MongoDB一步步創(chuàng)建一個響應(yīng)式的 RESTful web 服務(wù)。這篇文章的基礎(chǔ)是從 Spring 框架開始 第四版。本文的源代碼可以在 ch19-tor3-webservice 項(xiàng)目中找到。( HYPERLINK http:/bit.ly/2zTuD0Y http:/bit.ly/2zTuD0Y) 要運(yùn)行這個項(xiàng)目,可以在 T

2、omcat 9 上部署 ch19-reptor3-webservice 項(xiàng)目,并執(zhí)行 ReactiveWebClient 的主要方法(位于 src/test/java 文件夾中)。要創(chuàng)建一個響應(yīng)的 RESTful web 服務(wù),您需要確保 web 服務(wù)的每個層(數(shù)據(jù)訪問、服務(wù)和 web )在本質(zhì)上都是響應(yīng)的。使用 Spring Data 開發(fā)數(shù)據(jù)訪問層。對于 MongoDB 來說,可以使用動態(tài)數(shù)據(jù)庫驅(qū)動程序,可以使用 Spring Data (Kay release )來重新與MongoDB 數(shù)據(jù)庫交互。BankAccountReactorRepository (一個 Spring 數(shù)據(jù)存儲庫

3、),它定義了返回響應(yīng)類型的方法(由反應(yīng)器定義):public interface BankAccountReactorRepository extends ReactiveMongoRepository, BankAccountReactorRepositoryCustom Mono countByBalance(int balance);Flux findByBalance(int balance);注意 從存儲庫方法返回反應(yīng)類型( Flux 和 Mono ),也可以返回由 RxJava 2 定義的反應(yīng)類型。MongoDB配置Spring Dataimport org.springframe

4、work.data.mongodb.ReactiveMongoDatabaseFactory; import org.springframework.data.mongodb.core.ReactiveMongoTemplate;import org.springframework.data.mongodb.core.SimpleReactiveMongoDatabaseFactory;import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;ConfigurationEn

5、ableReactiveMongoRepositories(basePackages = sample.spring.chapter19.bankapp.repository) public class DatabaseConfig Beanpublic MongoClient mongoClient() throws UnknownHostException return MongoClients.create(mongodb:/localhost);public ReactiveMongoDatabaseFactory mongoDbFactory() . return new Simpl

6、eReactiveMongoDatabaseFactory(mongoClient(), test);Beanpublic ReactiveMongoTemplate reactiveMongoTemplate() . return new ReactiveMongoTemplate(mongoDbFactory();EnableReactiveMongoRepositories 注釋允許使用響應(yīng)式 MongoDB 存儲庫。basepackage 屬性指定要掃描無反應(yīng) MongoDB 存儲庫的包。Bean 注解的 mongoDbFactory 方法創(chuàng)建并返回SimpleReactiveMong

7、oDatabaseFactory 的一個實(shí)例。SimpleReactiveMongoDatabaseFactory 的構(gòu)造函數(shù)接受 MongoClient 的實(shí)例和數(shù)據(jù)庫的名稱(在我們的例子中是測試)。Bean 注釋的 reactiveMongoTemplate 方法配置了一個Spring Data MongoDB的reactiveMongoTemplate 實(shí)例,該模板被存儲庫用于在 MongoDB 上執(zhí)行被動操作。開發(fā)服務(wù)層由于我們不希望服務(wù)層中的方法阻塞,所以服務(wù)方法返回響應(yīng)的類型。下面的清單顯示了定義服務(wù)方法的 BankAccountService 接口:public interfac

8、e BankAccountService Mono saveBankAccount(BankAccountDetails bankAccountDetails); Flux findByBalance(int balance);Mono addFixedDeposit(String bankAccountId, int amount);以下清單顯示實(shí)現(xiàn) BankAccountService 接口的 BankAccountServiceImpl 類:Servicepublic class BankAccountServiceImpl implements BankAccountService A

9、utowiredprivate BankAccountReactorRepository bankAccountRepository;Overridepublic Mono countByBalance(int balance) return bankAccountRepository.countByBalance(balance);Overridepublic Flux findByBalance(int balance) return bankAccountRepository.findByBalance(balance);countByBalance 和 findByBalance 方法

10、調(diào)用 BankAccountReactorRepository 中定義的相應(yīng)方法。使用Spring WebFlux 開發(fā)Web層Spring WebFlux 模塊(在 Spring 5中引入)支持開發(fā)響應(yīng)式 web 應(yīng)用程序和基于RESTful web 服務(wù)。就像 Spring Web MVC的情況一樣,您可以使用 Controller、GetMapping 等來編寫響應(yīng)式的Web控制器。下面的清單顯示了 BankAccountController 類(一個響應(yīng)式的web控制器),它調(diào)用 BankAccountService的方法:import reactor.core.publisher.F

11、lux; import reactor.core.publisher.Mono;RestController RequestMapping(/bankaccount) public class BankAccountController Autowiredprivate BankAccountService bankAccountService;GetMapping(/countByBalance/balance)public Mono countByBalance(PathVariable(balance) int balance) return bankAccountService.cou

12、ntByBalance(balance);GetMapping(/findByBalance/balance)public Flux findByBalance(PathVariable(balance) int balance) return bankAccountService.findByBalance(balance);配置Spring WebFlux下面的清單展示了配置 WebFlux 的 WebConfig 類import org.springframework.web.reactive.config.EnableWebFlux;EnableWebFlux Configuratio

13、nComponentScan(basePackages = sample.spring.chapter19.bankapp.controller) public class WebConfig 在上面的清單中,EnableWebFlux 注解為項(xiàng)目配置 WebFlux 。ComponentScan 指定包含特定于web 層的類的包。作為控制器在sample.spring.chapter19.bankapp 中定義。控制器包,它被指定為ComponentScan 注解的 basePackages 屬性的值。ServletContext 配置您可以通過使用Spring的AbstractAnnota

14、tionConfigDispatcherHandlerInitializer類以編程方式配置基于webflux的web應(yīng)用程序(或RESTful web服務(wù))的ServletContext,如下所示: PAGE 6importweb.reactive.support.AbstractAnnotationConfigDispatcherHandlerInitializer;public class BankAppInitializer extends AbstractAnnotationConfigDispatcherHandlerInitializer Overrideprotected Cl

15、ass getConfigClasses() return new Class WebConfig.class,DatabaseConfig.class, BankAccountServiceImpl.class ;getConfigClasses 方法返回我們想要在應(yīng)用程序上下文中注冊的 Configuration(或Component)WebConfig.class 在web層注冊bean , DatabaseConfig.class 在數(shù)據(jù)訪問層中注冊bean。測試響應(yīng)的RESTful Web 服務(wù)Spring的WebClient類(不像RestTemplate)允許您重新與一個響應(yīng)式的

16、RESTful web服務(wù)交互。下面的清單顯示了訪問BankAccountController定義的方法的ReactiveWebClient類:import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.client.WebClient;public class ReactiveWebClient private static Logger logger =LogManager.getLogger(ReactiveWebClien

17、t.class); private static WebClient webClient =WebClient.create(http:/localhost:8080/ ch19-reactor3-webservice/bankaccount);public static void main(String args) throws InterruptedException / -find BankAccountDetails entities with balance 1000 webClient.get().uri(/findByBalance/balance,1000).accept(MediaType.APPLICATION_JSON).retrieve().bodyToFlux(BankAccountDetails.class).subscribe(account - (account with balance 1000 - + account.getAccountId();WebClient的 create 方法創(chuàng)建了一個帶有基本URL、主機(jī)和端口信息的WebClient實(shí)例。在端口8080上本地部署了ch19- respon

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論