当前位置: 首页 > 知识库问答 >
问题:

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

任昊阳
2023-03-14

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

共有1个答案

葛子昂
2023-03-14

为了触发WebClient响应式请求,您必须订阅lattery以触发HTTP调用:

service.sendSms(request)
    .subscribe(System.out::println);

否则,您将必须链接Mono

因此,为了在控制器endpoint调用时触发WebClient请求,您必须将其返回结果映射到正确的响应实体,然后返回结果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)以及对所创建资源的引用来更新响应。

 类似资料:
  • 如何在基于网络的 HTTP 客户端中重试 HTTP 请求? 请考虑以下处理程序,如果收到 HTTP 响应代码 503,它将尝试在 1 秒后重试 HTTP 请求: 在本例中,当我写入通道时,管道中的其他处理程序会看到HttpObjects,但实际上不会再次执行HttpRequest——只接收到一个HttpResponse。 我认为在这种情况下我只是滥用了 Channel,我需要创建一个新的通道(表示

  • 测试: 现在我得到了这个错误:

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 问题内容: 这是该问题的后续问题,在这里我问什么是Hiveserver 2旧版Java客户端API。如果您不需要更多背景信息,那么这个问题应该能够在没有背景的情况下得以解决。 找不到有关如何使用hiverserver2旧版api的任何文档,我将它们放在一起。我能找到的最佳参考是Apache JDBC实现 。 我针对使用以下代码创建的Hiverserver2实例运行此代码 调试时,我从不走线 客户端

  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

  • 我正在关注Spotify的客户端凭据授权流,但我的所有curl请求每次都返回。以下是Spotify的说明: 请求将在请求正文中包含参数: grant_type-设置为“client_credentials” 此 POST 请求的标头必须包含以下参数: < li >授权-包含客户端ID和客户端密钥的Base 64编码字符串。该字段必须具有以下格式:<代码>授权:基本 它们还包括一个curl请求示例: