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

响应Spring WebClient调用

沙柏
2023-03-14

我正在尝试理解WebFlux,但在WebClient调用方面遇到了一些问题。我没有看到这一行System.out.println("CusterId="CusterId);执行它似乎不调用endpoint。但是如果我使用。订阅(客户-

@GetMapping("/customer/{customerId}")
@ResponseStatus(HttpStatus.ACCEPTED)
public Mono<Void> getCustomer(@PathVariable("customerId") int customerId) {
     WebClient webClient = WebClient.builder().baseUrl("http://localhost:8080").build();

 webClient.get()
  .uri("/client/customer/{customerId}",customerId)
  .accept(MediaType.APPLICATION_JSON)
  .retrieve()
  .bodyToMono(Customer.class);//here do I have to subscribe to actually activate to call?

 return null;
}


@GET
@Path("/customer/{customerId}")
@Produces(MediaType.APPLICATION_JSON)
public Customer getCustomer(@PathParam("customerId") int customerId) throws InterruptedException {
    System.out.println("customerId = " + customerId);  // I do not see the call comes thru if I dont subscribe to flux call.
    return new Customer(customerId,"custName");
} 

共有1个答案

萧辰沛
2023-03-14

如果您想从WebClient返回反应式类型,则必须从控制器方法返回它,例如:

@GetMapping("/customer/{customerId}")
@ResponseStatus(HttpStatus.ACCEPTED)
public Mono<Customer> getCustomer(@PathVariable("customerId") int customerId) {
     WebClient webClient = WebClient.builder().baseUrl("http://localhost:8080").build();

 return webClient.get()
  .uri("/client/customer/{customerId}",customerId)
  .accept(MediaType.APPLICATION_JSON)
  .retrieve()
  .bodyToMono(Customer.class);
}

您还可以从您的endpoint和块返回客户并等待WebClient的结果并离开反应式生态系统,例如:

@GetMapping("/customer/{customerId}")
@ResponseStatus(HttpStatus.ACCEPTED)
public Customer getCustomer(@PathVariable("customerId") int customerId) {
     WebClient webClient = WebClient.builder().baseUrl("http://localhost:8080").build();

 return webClient.get()
  .uri("/client/customer/{customerId}",customerId)
  .accept(MediaType.APPLICATION_JSON)
  .retrieve()
  .bodyToMono(Customer.class)
  .block()
}

如果您正在查看Spring的WebClient的一般介绍,请查看本教程

 类似资料:
  • 我已经定义了: 在filter方法中,我记录了响应,但我还想添加执行请求的。我知道我可以在请求之前访问这些数据(使用),但有没有办法将这些数据添加到我的过滤器?

  • 我正在尝试使用Web客户端创建REST调用 我只想记录通话结果。成功时 - 使用响应正文记录成功消息,在 5XX 或超时或其他时 - 记录错误消息。日志应该在后台创建(而不是由创建调用的线程创建)但是每次都会执行,工作正常,但也有 记录在日志文件中。 我也在一些教程中看到过方法,但在我的设置中有这样的方法。 如何记录成功和失败消息?

  • 我必须使用WebClient进行分页API调用,并最终组合所有结果。例如:个人最新1000交易详情。在一次调用中,我将在json响应(List)中获得最大100个对象。这个人最多只能得到1000条记录。 在伪代码java中,它可能看起来像这样 如何在SpringMVC中以反应式方式编写相同的内容而不阻塞? 像这样的东西???我不知道。帮助我

  • 描述 (Description) 如果未给出flex网格中列的显式大小,则它将自动调整列的大小。 对于较小的屏幕,请使用.small-*类。 medium-expand或large-expand类用于扩展行为。 例子 (Example) 以下示例演示了在Foundation中使用responsive adjustment - <!DOCTYPE html> <html> <head>

  • 我正在用Spring做一个项目,我有这个问题,我谷歌了错误信息,我找到了解决方案,甚至所有关于这个问题的帖子 有人能帮忙吗?

  • 我正在尝试在y应用程序中实现REST APIendpoint。 因此,我编写了包含映射为(Heroku/ResSources)的方法的类。但是当我试图调用它时,我得到一个404错误,因为没有找到。但是,我甚至不想获得视图,而是要获得HTTP响应。