Spring boot 2 WebClient获取订阅服务器中的上下文参数
我使用WebClient调用一个外部API,为每个请求关联一个requestId。处理请求并收到响应后,我将使用requestId更新一些表,以便确认与requestId关联的所有数据都已处理Spring boot 2 WebClient获取订阅服务器中的上下文参数,spring,spring-boot,reactive-programming,spring-webflux,spring-web,Spring,Spring Boot,Reactive Programming,Spring Webflux,Spring Web,我使用WebClient调用一个外部API,为每个请求关联一个requestId。处理请求并收到响应后,我将使用requestId更新一些表,以便确认与requestId关联的所有数据都已处理 public void getEmployeeData(List<Integer>employeeIds, String requestId){ WebClient webClient = WebClient.builder().baseUrl(baseUrl).build();
public void getEmployeeData(List<Integer>employeeIds, String requestId){
WebClient webClient = WebClient.builder().baseUrl(baseUrl).build();
webClient.post().uri(uri)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.header(HttpHeaders.AUTHORIZATION, "Basic " + Base64Utils
.encodeToString((plainCreds)
.getBytes(Charset.defaultCharset())))
.body(BodyInserters.fromObject(body)).retrieve()
.bodyToFlux(EmployeeInfo.class)
.doOnError(throwable -> {
Mono.error(throwable);
}).subscribe(new Consumer<EmployeeInfo>() {
@Override
public void accept(EmployeeInfo employeeInfo) {
// Here I need the requestId which is passed as function
//parameter
}
});
}
public void getEmployeeData(ListEmployeeId,String requestId){
WebClient WebClient=WebClient.builder().baseUrl(baseUrl.build();
webClient.post().uri(uri)
.contentType(MediaType.APPLICATION\u JSON\u UTF8)
.accept(MediaType.APPLICATION\u JSON\u UTF8)
.header(HttpHeaders.AUTHORIZATION,“Basic”+Base64Utils
.encodeToString((明文)
.getBytes(Charset.defaultCharset()))
.body(BodyInserters.fromObject(body)).retrieve()
.bodyToFlux(EmployeeInfo.class)
.doon错误(可丢弃->{
单声道错误(可丢弃);
}).订阅(新消费者){
@凌驾
公共作废接受(EmployeeInfo EmployeeInfo){
//这里我需要作为函数传递的requestId
//参数
}
});
}
上面的函数接收带有requestid的员工ID列表,我必须调用外部API来获取员工列表的信息,在调用此函数之前,我将根据requestid保存所有员工列表,因此,一旦收到响应,我就可以更新表,声明已收到给定requestId的所有员工信息。现在在订户部分中,我需要requestId,这样我就可以关联收到的响应属于特定requestId,您可以添加requestId的final,这样它就可以在subscribe函数中使用
public void getEmployeeData(List<Integer>employeeIds, final String requestId){
public void getEmployeeData(ListEmployeeId,最终字符串requestId){
您所指的requestId在哪里?您尝试了什么?为什么不起作用?您需要对远程服务返回的数据做些什么吗?@BrianClozel我已经更新了问题,并提供了更清楚的示例。我仍然不明白问题所在。requestId
方法参数在该范围内可用。为什么您不能u重用您在这里获得的requestId
?否则您希望在哪里找到该信息?