java webclient使用,java – Spring Reactive WebClient
我有一个反应式休息api(webflux),也使用
spring WebClient类,从其他休息服务请求数据.
简化设计:
@PostMapping(value = "/document")
public Mono save(@RequestBody Mono document){
//1st Problem: I do not know how to get the documentoOwner ID
//that is inside the Document class from the request body without using .block()
Mono documentOwner = documentOwnerWebClient()
.get().uri("/document-owner/{id}", document.getDocumentOwner().getId())
.accept(MediaType.APPLICATION_STREAM_JSON)
.exchange()
.flatMap(do -> do.bodyToMono(DocumentOwner.class));
//2nd Problem: I need to check (validate) if the documentOwner object is "active", for instance
//documentOwner and document instances below should be the object per se, not the Mono returned from the external API
if (!documentOwner.isActive) throw SomeBusinessException();
document.setDocumentOwner(documentOwner);
//Now I can save the document in some reactive repository,
//and return the one saved with the given ID.
return documentRepository.save(document)
}
换句话说:我理解(几乎)单独的所有反应性示例,但我无法将它们全部放在一起并构建一个简单的用例(get – > validate – > save – > return)而不会阻塞对象.
我越接近的是:
@PostMapping(value = "/document")
public Mono salvar(@RequestBody Mono documentRequest){
return documentRequest
.transform(this::getDocumentOwner)
.transform(this::validateDocumentOwner)
.and(documentRequest, this::setDocumentOwner)
.transform(this::saveDocument);
}
辅助方法有:
private Mono getDocumentOwner(Mono document) {
return document.flatMap(p -> documentOwnerConsumer.getDocumentOwner(p.getDocumentOwnerId()));
}
private Mono validateDocumentOwner(Mono documentOwner) {
return documentOwner.flatMap(do -> {
if (do.getActive()) {
return Mono.error(new BusinessException("Document Owner is Inactive"));
}
return Mono.just(do);
});
}
private DocumentOwnersetDocumentOwner(DocumentOwner documentOwner, Document document) {
document.setDocumentOwner(documentOwner);
return document;
}
private Mono saveDocument(Mono documentMono) {
return documentMono.flatMap(documentRepository::save);
}
我正在使用Netty,SpringBoot,Spring WebFlux和Reactive Mongo Repository.但是有一些问题:
1)我收到错误:
java.lang.IllegalStateException:只允许一个连接接收订阅者.也许是因为我使用相同的documentRequest转换和setDocumentOwner.我真的不知道.
2)没有调用setDocumentOwner方法.因此,不保存要保存的文档对象.我相信可以有更好的方法来实现这个setDocumentOwner().
谢谢
java webclient使用,java – Spring Reactive WebClient相关推荐
- Spring WebClient和Java日期时间字段
WebClient是Spring Framework的反应式客户端,用于进行服务到服务的调用. WebClient已成为我的实用工具,但是最近我意外地遇到了一个问题,即它处理Java 8时间字段的方式 ...
- webClient请求JAVA超时解决方案
webClient请求JAVA超时解决方案 参考文章: (1)webClient请求JAVA超时解决方案 (2)https://www.cnblogs.com/flyfish2012/p/564987 ...
- Spring的WebClient基本使用
WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具.它的响应式编程的基于Reactor的.WebClient中提供了标准H ...
- 集成Java内容仓库和Spring
保存各种信息对于应用程序来说非常平常,大多数时候它们是保存在关系数据库中.数据库处理规范数据类型十分在行,但是在处理如图像.文档等二进制数据时却不是那么得心应手.尽管可以用文件系统作为替代--而且它们 ...
- 在普通Java类里使用spring里注入的service、dao等
版权声明:本文为博主武伟峰原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu. 在spring管理的web项目里,譬如Struts和spring的项目,配 ...
- java was datasource_使用Spring Boot配置Druid时dataSource无法被autowired
配置好了dataSource之后,想测试一下有没有配置成功 package com.yang.Controller; import com.alibaba.druid.pool.DruidDataSo ...
- java 获取spring对象数组_解析Java中如何获取Spring中配置的bean
解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...
- Java开源项目:Spring Integration
2019独角兽企业重金招聘Python工程师标准>>> Java开源项目:Spring Integration http://www.importnew.com/16538.html ...
- spring 加载java类_在Spring中基于Java类进行配置的完整步骤
在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...
最新文章
- Eclipse SVN插件冲突导致不能使用解决办法
- 开闭鸿蒙都只为风味情浓,开辟鸿蒙,谁为情种?都只为风月情浓。
- MAC OS中的dylib 的@rpath和@loader_path小问题
- 因子和(类素数筛选法)
- Oracle 表空间的段管理
- Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)
- python房子代码_基于python的链家小区房价爬取——仅需60行代码!
- 用SVD和字典学习方法重建图像(cifar-10图片集)
- vue-cli项目在IE下运行钩子函数抛出异常“ReferenceError: “Promise”未定义“”的解决办法
- 关于2020新版idea,maven工程依赖成功导入、但运行找不到jar包问题解决。
- 简单调整配置深度Linux-15迅速开始学习工作
- Windows系统目录下文件夹汇总
- Linux iptable文档
- java满天星星代码_纯Java代码实现流星划过天空
- BeanUtils.populate()抛出异常处理
- 微信小程序之如何实现一寸照片换底色(附小程序成品)
- OUTER JOIN的应用场景
- python pip安装第三方包速度慢,这篇博客给你安排清楚了
- hp vse虚拟服务器,HP9000用户升级硬件平台的捷径
- linux手写数字识别,mnist手写数字识别与图片预处理