You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目中WireMock无法Mock WebClient请求的问题求助

问题根源

你遇到的Connection refused报错由两个核心错误导致:

  • 第一:你在测试类上配置了@AutoConfigureWireMock(port = 0),代表WireMock会随机选择可用端口启动,但业务代码里硬编码了第三方服务的调用地址为http://localhost:8443,端口不匹配自然无法连接到WireMock服务。
  • 第二:Stub规则的路径匹配参数填写错误,urlPathEqualTo方法仅需要传入请求的路径部分,不需要携带域名、端口前缀,你当前填写的全量地址会导致规则匹配失败。

解决步骤

快速修复方案

直接按现有代码逻辑修改两处即可运行:

  1. 修改测试类上的WireMock注解,固定启动端口为8443:
    把@AutoConfigureWireMock(port = 0)改为@AutoConfigureWireMock(port = 8443)
  2. 修改@BeforeEach里的Stub规则,匹配路径仅保留路径部分:
    stubFor(post(urlPathEqualTo("/my-third-party-endpoint"))
        .willReturn(aResponse()
            .withStatus(200)
            .withHeader("Content-Type", MediaType.APPLICATION_JSON.toString())
            .withHeader("Accept", MediaType.APPLICATION_JSON.toString())
            .withBody("{}")));
    

规范优化方案(推荐)

避免硬编码地址,后续不会出现端口冲突、环境切换等问题:

  1. 把第三方服务地址抽到Spring配置文件中,比如在application.yml里添加配置:
    third-party:
      ml-service:
        base-url: http://localhost:8443
    
  2. 业务代码中通过注入方式获取地址,不要硬编码:
    @Value("${third-party.ml-service.base-url}")
    private String mlServiceBaseUrl;
    
    // 创建WebClient时使用注入的地址
    WebClient webClient = WebClient.create(mlServiceBaseUrl);
    
  3. 测试时直接复用WireMock自动注入的环境变量wiremock.server.port,在测试配置文件application-test.yml中覆盖配置:
    third-party:
      ml-service:
        base-url: http://localhost:${wiremock.server.port}
    
  4. 保留前面提到的Stub路径修正即可,不需要固定WireMock端口,避免本地端口占用导致测试启动失败。

内容的提问来源于stack exchange,提问作者Mgnfcnt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:57:03