我是 WebClient 領域的新手,但我遇到了以下問題。這是我的客戶端方法,您已經看到它應該將我發送給引數的值插入到資料庫中,但我無法插入它。
@Override
public Mono<BulkSmsRequestResource> sendSms(BulkSmsRequestResource request) {
Mono<BulkSmsRequestResource> bulkSmsRequestResourceMono = webClientBuilder.build()
.post()
.uri(url1)
.body(Mono.just(request), BulkSmsRequestResource.class)
.retrieve()
.bodyToMono(BulkSmsRequestResource.class);
return bulkSmsRequestResourceMono;
}
我在這里寫的代碼是我的控制器區域。
@PostMapping("/send")
public ResponseEntity<? extends ResponseResource> sendSms(@RequestBody BulkSmsRequestResource request) {
if (request == null) {
return new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed successfully!",
400),
HttpStatus.BAD_REQUEST);
}
this.smsSendService.sendSms(request);
return new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK);
}
當我運行我的方法時,我無法將值添加到服務器端的資料庫中,但我可以使用客戶端方法使用以下方法從那里獲取值。
@Override
public Flux<BulkSmsResponseDto> findAll() {
Flux<BulkSmsResponseDto> bulkSmsResponseDtoFlux = webClientBuilder.build()
.get()
.uri(url2)
.retrieve()
.bodyToFlux(BulkSmsResponseDto.class);
return bulkSmsResponseDtoFlux;
}
uj5u.com熱心網友回復:
為了觸發WebClient回應式請求,您必須訂閱后者以觸發 HTTP 呼叫:
service.sendSms(request)
.subscribe(System.out::println);
否則,您必須將 鏈接Mono<?>到控制器方法結果,以便底層基礎結構(在本例中為Spring)知道如何處理它(在更改點訂閱它導致呼叫 HTTP 呼叫)。
因此,為了WebClient在您的控制器端點呼叫時觸發請求,您必須將其回傳結果映射到正確的ResponseEntity然后回傳結果Mono:
@PostMapping("/send")
public Mono<ResponseEntity<? extends ResponseResource>> sendSms(@RequestBody BulkSmsRequestResource request) {
if (request == null) {
return Mono.just(new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed successfully!",
400),
HttpStatus.BAD_REQUEST));
}
return this.smsSendService.sendSms(request)
.map(result -> new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK));
}
設計邊注:也許您需要使用正確的 HTTP 代碼 (201) 以及對創建的資源的參考來更新回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337285.html
