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

从RestTemplate到WebClient(Spring Boot 2.0.0.m3)的问题

巫研
2023-03-14

从一个普通的MVC项目转移到一个被动的项目,并且正在使用Spring Boot(新版本2.0.0.M3)。

在这个特殊的prblem出现之前,我对整个库没有任何问题。

在使用WebClient时,我有一个不起作用的请求。它以前在RestTemplate中工作得很好:

rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", "Basic REDACTED");

HttpEntity<OtherApiRequest> entity = 
new HttpEntity<OtherApiRequest>(CrawlRequestBuilder.buildCrawlRequest(req), headers);

ResponseEntity<Void> response = rt.postForEntity("https://other_api/path", 
    entity, 
    Void.class);

System.out.println(response.getStatusCode());
client
  .post()
  .uri("https://other_api/path")
  .header("Authorization", "Basic REDACTED")
  .contentType(MediaType.APPLICATION_JSON)
  .body(Mono.just(req), OtherApiRequest.class)
  .exchange()
  .then(res -> System.out.println(res.getStatusCode()));
ObjectMapper mapper = new ObjectMapper();
String body = mapper.writeValueAsString(
client
  .post()
  .uri("https://other_api/path")
  .header("Authorization", "Basic REDACTED")
  .contentType(MediaType.APPLICATION_JSON)
  .body(body, String.class)
  .exchange()
  .then(res -> System.out.println(res.getStatusCode()));
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class OtherApiRequest {
    private String app;
    private String urllist;
    private int maxDepth;
    private int maxUrls;

   public OtherApiRequest(String app, String urllist, int maxDepth, int maxUrls) {
        this.app = app;
        this.urllist = urllist;
        this.maxDepth = maxDepth;
        this.maxUrls = maxUrls;
    }

   public String getApp() {
        return app;
    }

   public String getUrllist() {
        return urllist;
    }

   public int getMaxDepth() {
        return maxDepth;
    }

   public int getMaxUrls() {
        return maxUrls;
    }

   public String toString() {
        return "OtherApiRequest: {" +
            "app: " + app + "," +
            "urllist: " + urllist + "," +
            "max_depth: " + maxDepth + "," +
            "max_urls: " + maxUrls +
            "}";
    }
}

共有1个答案

胡翔
2023-03-14

编辑:

在这里看到更好的答案

用WebClient发送POST请求时缺少内容长度标头(SpringBoot 2.0.2.Release)

$ netcat -l 6500
PUT /value HTTP/1.1
user-agent: ReactorNetty/0.7.5.RELEASE
transfer-encoding: chunked
host: localhost:6500
accept-encoding: gzip
Content-Type: application/json

4
3.16
0
 类似资料:
  • RestTemplate的当前javadoc声明: 注:从5.0开始,非阻塞、反应性组织。springframework。网状物反应性。客户WebClient为RestTemplate提供了一种现代化的替代方案,可以有效支持同步和异步以及流式场景。RestTemplate在未来的版本中将被弃用,并且不会添加主要的新功能。 我们正在使用spring boot 2.0.6和spring 5.0.10编

  • m3

    M3 Distributed TSDB and Query Engine, Prometheus Sidecar, Metrics Aggregator, and more such as Graphite storage and query engine. Table of Contents More Information Community Meetings Office Hours Ins

  • M3  是 Uber 开源的一个基于分布式时序数据库 M3DB 构建的度量平台,可每秒聚合 5 亿个指标,并且以每秒 2000 万笔的速度持续存储这些结果。 M3 目前拥有超过 66 亿条时序数据,每秒聚合5亿个指标,并在全球范围内每秒持续存储 2000 万个指标(使用 M3DB),批量写入将每个指标持久保存到不同区域的三个副本中。它还允许工程师编写度量策略,以不同的时间长度和不同粒度对资料进行保

  • 我有两个微服务,比如Microservice1使用RestTemplate调用Microservice2。 Microservice2上的处理程序方法如下。 Microservice1中的调用代码如下。 当我将该代码发送到侦听端口8081的Microservice1时,该代码正在工作并按预期返回JSON 但是,如果我使用Postman直接访问带有前面两个GET请求的Microservice 2,结

  • 我使用的是Rest模板,也使用了Web客户端。我得到钥匙作为回应,但身体总是空的。使用Postman,我可以看到响应,这是一个JSON。 我的代码片段在下面- 回应如下- {“结果”:[]} 有人面临同样的问题吗? 在《邮差》中,我能看到的回复头是- 键值 内容编码gzip 内容类型的应用程序/JSON;charset=utf-8 传输编码分块

  • 当从其中一个web服务获取数据时,引号(“)将显示为(?)当我使用Rest模板时。我在chrome上的postman中测试了web服务,并给出了正确的字符。我尝试编码UTF-8,但没有成功。 我检查了以下是从Web服务提供商编码: 高速缓存控制→私有连接→关闭内容编码→gzip内容长度→3407内容类型→text/xml; charset=ISO-8859-1日期→周三,2015 13:35:53