基于Spring的响应RESTful Web服务指南_第1页
基于Spring的响应RESTful Web服务指南_第2页
基于Spring的响应RESTful Web服务指南_第3页
基于Spring的响应RESTful Web服务指南_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1基于Spring的响应RESTful Web 服务指南 PAGE 5使用 Spring WebFlux、SpringData 和MongoDB 创建一个响应的 RESTful Web 服务了解如何在本教程中为 Spring WebFlux、Spring Data 和 MongoDB一步步创建一个响应式的 RESTful web 服务。这篇文章的基础是从 Spring 框架开始 第四版。本文的源代码可以在 ch19-tor3-webservice 项目中找到。( HYPERLINK http:/bit.ly/2zTuD0Y http:/bit.ly/2zTuD0Y) 要运行这个项目,可以在 T

2、omcat 9 上部署 ch19-reptor3-webservice 项目,并执行 ReactiveWebClient 的主要方法(位于 src/test/java 文件夹中)。要创建一个响应的 RESTful web 服务,您需要确保 web 服务的每个层(数据访问、服务和 web )在本质上都是响应的。使用 Spring Data 开发数据访问层。对于 MongoDB 来说,可以使用动态数据库驱动程序,可以使用 Spring Data (Kay release )来重新与MongoDB 数据库交互。BankAccountReactorRepository (一个 Spring 数据存储库

3、),它定义了返回响应类型的方法(由反应器定义):public interface BankAccountReactorRepository extends ReactiveMongoRepository, BankAccountReactorRepositoryCustom Mono countByBalance(int balance);Flux findByBalance(int balance);注意 从存储库方法返回反应类型( Flux 和 Mono ),也可以返回由 RxJava 2 定义的反应类型。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 注释允许使用响应式 MongoDB 存储库。basepackage 属性指定要扫描无反应 MongoDB 存储库的包。Bean 注解的 mongoDbFactory 方法创建并返回SimpleReactiveMong

7、oDatabaseFactory 的一个实例。SimpleReactiveMongoDatabaseFactory 的构造函数接受 MongoClient 的实例和数据库的名称(在我们的例子中是测试)。Bean 注释的 reactiveMongoTemplate 方法配置了一个Spring Data MongoDB的reactiveMongoTemplate 实例,该模板被存储库用于在 MongoDB 上执行被动操作。开发服务层由于我们不希望服务层中的方法阻塞,所以服务方法返回响应的类型。下面的清单显示了定义服务方法的 BankAccountService 接口:public interfac

8、e BankAccountService Mono saveBankAccount(BankAccountDetails bankAccountDetails); Flux findByBalance(int balance);Mono addFixedDeposit(String bankAccountId, int amount);以下清单显示实现 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、调用 BankAccountReactorRepository 中定义的相应方法。使用Spring WebFlux 开发Web层Spring WebFlux 模块(在 Spring 5中引入)支持开发响应式 web 应用程序和基于RESTful web 服务。就像 Spring Web MVC的情况一样,您可以使用 Controller、GetMapping 等来编写响应式的Web控制器。下面的清单显示了 BankAccountController 类(一个响应式的web控制器),它调用 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 注解为项目配置 WebFlux 。ComponentScan 指定包含特定于web 层的类的包。作为控制器在sample.spring.chapter19.bankapp 中定义。控制器包,它被指定为ComponentScan 注解的 basePackages 属性的值。ServletContext 配置您可以通过使用Spring的AbstractAnnota

14、tionConfigDispatcherHandlerInitializer类以编程方式配置基于webflux的web应用程序(或RESTful web服务)的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 方法返回我们想要在应用程序上下文中注册的 Configuration(或Component)WebConfig.class 在web层注册bean , DatabaseConfig.class 在数据访问层中注册bean。测试响应的RESTful Web 服务Spring的WebClient类(不像RestTemplate)允许您重新与一个响应式的

16、RESTful web服务交互。下面的清单显示了访问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 方法创建了一个带有基本URL、主机和端口信息的WebClient实例。在端口8080上本地部署了ch19- respon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论