spring - spring webflux如何调用微服务获取数据
问题描述
我想在 Spring Flux 中使用 webclient 从另一个服务调用微服务。但是,我无法正确编写代码。您能否建议如何调用其他服务。请在下面找到我的代码。
我需要致电以下服务
public Mono<ServerResponse> load(ServerRequest res){
String c1name = res.pathVariable("cust");
String c2name = res.queryParam("cl").orElse("");
String oname = res.queryParam("ol").orElse("");
return res.body()
}
public Mono<ResponseEntity<Void>> ftpFileSend(MultipartFile fileData, String cust, MultiValueMap<String,String) qpar {
MultiValueMap<String,String> qpar=new LinkedMultiValueMap<String,String>();
qpar.add("name","spring");
MultiValueMap<String,Object> body=new LinkedMultiValueMap<String,Object>();
String url="http://localhost:8088/"+ cust+"/load";
try {
body.add("file", fileData.getBytes());
} catch (IOException e) {
return Mono.error(e); // <-- note how to create an error signal
}
return webClient
.post()
.uri(uriBuilder -> uriBuilder.path(url).queryParams(qpar).build() )
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(body))
.retrieve()
.toBodilessEntity();
}
解决方案
嗯,如果您提供了一些错误日志,那就太好了。无论如何,如果您想创建一个多部分主体,则有一个构建器MultipartBodyBuilder
(在 org.springframework.http.client.MultipartBodyBuilder 中)。
示例用法如下,
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", new MultipartFileResource(fileData));
MultiValueMap<String, HttpEntity<?>> multipartBody = builder.build();
然后multipartBody
在 webClient 调用中使用它。
return webClient
...
.body(BodyInserters.fromMultipartData(multipartBody))
.retrieve()
.toBodilessEntity();
推荐阅读
- android - 转弯 GPS 导航中的位置不准确
- ruby-on-rails - 表和网络中的 Postgresql 日期差异
- python - 在python中读取SQL表
- spring-data - Spring Data Embedded Mongo:服务器上的“未知顶级运算符:$ expr”
- sas - 如何在 SAS 中找到特定日期和今天日期之间的持续时间(以月为单位)?
- java - Jhipster Gateway 用户如何仅从登录用户的服务中获取实体
- java - 生成的 .jar 无法加载某些媒体文件
- mongodb - MongoDB 聚合 - 将数据划分为时间桶
- firebase - Firebase 身份验证 SLA
- react-native - 在另一个组件中显示上传的图像