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

如何在Spring-Boot中使用resttemplate模拟一个服务调用另一个服务?

魏襦宗
2023-03-14

各位专家下午好,

我需要调用3个REST API的顺序调用,作为单个客户机调用GET/offers的一部分,以检索百货公司不同通道中每种产品的可用报价,如下所示

然后在循环中检索每个aisleid并调用第二个API以获得产品

ResponseEntity<Products> products= restTemplate.exchange(url,
                    HttpMethod.GET, requestEntity, Products.class);

然后在循环中检索每个productID并调用第三个API以获得提供

最后,整理所有的响应,将报价列表发送给客户。

共有1个答案

慕容博涛
2023-03-14

您可以只模拟服务的响应,而不是模拟rest模板。为此,您可以使用Wiremock(http://Wiremock.org/),它提供了一个api来存根对特定URL的调用,模拟它们对您喜欢的任何响应,并验证它们是否被调用。

对于您的情况,您需要3个存根,一个为每个交换。例如,对于此方法restTemplate.exchange(url,GET,requestEntity,Products.Class);,您提供的存根如下所示

stubFor(get(urlEqualTo("yourUrl"))
  .willReturn(aResponse()
    .withStatus(200)
    .withBody(new ObjectMapper().writeValueAsString(yourResponseObject)
    .withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE))

注意,您的url将需要指向运行wiremock的服务器(如果使用java依赖项和junit规则,它将是localhost:WiremockPort)

设置非常简单,因为您需要在测试中添加一个规则

@rule public WireMockRule WireMockRule=new WireMockRule(options().dynamicport());有关规则的配置,请参阅此处http://wiremock.org/docs/configuration/

并在最后验证调用的存根

verify(getRequestedFor(urlEqualTo("/yourUrl"))
  .withRequestBody(equalTo(new ObjectMapper().writeValueAsString(theObjectThatShouldBePosted))));

希望有帮助!

 类似资料:
  • 我有以下服务: 和其他服务 我有我的Junit 当我在调试模式下运行这个测试时,我看到这个。合同服务。getInfo(multipartFileId) 正在返回我“null”。 我在嘲弄中错在哪里。 我刚刚在JUnit中嘲笑了ContractService。我还需要模拟AccountServiceImpl吗? 编辑:添加saveInCache和getInfo方法

  • 我正在使用尤里卡发现服务器。我可以通过通过使用服务名从另一个微服务调用一个微服务,这对Eureka服务器是可见的。我听说在不久的将来将被弃用。 我还可以通过使用从另一个微服务调用一个微服务,但在本例中,我需要使用整个主机名。我不能叫他们服务名称。 是的,我可以从属性文件设置基本url,这样不需要重新启动jar,我们就可以更改基本url。如果我们这样做,那么我们可能不需要任何discovery服务器

  • 我想从我的后端调用另一个web-api对用户的特定请求。例如,我想调用Google FCM发送消息api,就事件向特定用户发送消息。 改型有什么方法可以做到这一点吗?如果没有,我怎么能做到?

  • 我使用CXF、REST服务和Apache Camel实现了以下API。 http://localhost:9090/api/compute http://localhost:9091/api/listaction null IllegalArgumentException:无效的URI:/API/ListAction/API/ListAction。如果您正在转发/桥接httpendpoint,则在

  • 我有一个Spring Boot rest服务,它将调用另一个web服务(用.NET编写),但它需要安装web服务的服务器的公共证书。

  • 我想将多部分文件从一个服务传递到另一个服务。 客户- 当我将文件从Service1传递到Service2时,显示了一个错误“500内部服务器错误,当前请求不是多部分请求” 客户- 我想知道可能是什么原因,我想我错过了一些头部分时传递的多部分文件作为参数。 服务2 服务2客户端 服务1