使用WEBCLIENT使用POST请求客户端方法



我是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;
}

为了触发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)以及对已创建资源的引用来更新响应。

最新更新