【发布时间】:2018-10-21 07:31:20
【问题描述】:
问题说明:我有一个对 booking-service API 的 POST 请求,该 API 获取了 BookingRecord。我映射它以提取值,以便使用 WebClient 调用另一个 fare-service API。我从那个电话中收到了Mono<Fare>。我需要检查 BookingRecord 类型的 getFare() 方法的值是否与 WebClient 返回的 Fare 类型的 getFare() 相同。如果没有,我需要引发异常,并将其传递给调用者。这里 caller 是另一个微服务,ui-service 调用了 booking-service API(那么我应该如何处理这个问题,将错误传回或者最好的办法是什么?)否则我会保存新的 BookingRecord 并将该记录的 id 返回给调用者。最好的流程顺序是什么?我尽力而为,但没有取得多大成功,并将代码粘贴到此处。
public HandlerFunction<ServerResponse> book = request ->
{
request.bodyToMono(BookingRecord.class)
.map(br ->
{
this.webClient.get()
.uri("/fares/get/{flightNumber}/{flightDate}",
br.getFlightNumber(),
br.getFlightDate())
.retrieve()
.bodyToMono(Fare.class)
.map(f ->
{
if (!f.getFare()
.equals(br.getFare()))
{
throw new RuntimeException("Fare is tampered");
}
else
{
id = bookingRepository.save(br).getId();
}
return id;
})
.subscribe();
return id;
});
return ServerResponse.ok()
.body(BodyInserters.fromObject(id));
};
【问题讨论】:
标签: spring-webflux