You need to enable JavaScript to run this app. 使用WireMock测试Spring WebFlux代码时出现500错误Connection refused
优惠活动
大模型
产品
解决方案
定价
更多

使用WireMock测试Spring WebFlux代码时出现500错误Connection refused

错误根因&修复方案

1. WireMock配置参数注入错误

你当前的WireMockInit类中TestPropertyValues的使用语法错误,导致WireMock的服务地址没有正确注入到Spring环境变量中,你的WebClient也就没有拿到正确的外部接口地址,默认请求了不存在的端口触发连接拒绝。
修复WireMockInit中的参数注入代码:

// 替换原有TestPropertyValues.of那一行
TestPropertyValues.of("externalBaseUrl=" + wireMockServer.baseUrl()).applyTo(applicationContext);

2. WebClient没有绑定注入的外部地址

你需要新增WebClient配置类,把注入的externalBaseUrl设为WebClient的默认根路径,否则WebClient调用时不会指向WireMock服务:

@Configuration
public class WebClientConfig {
    // 读取注入的WireMock服务地址
    @Value("${externalBaseUrl}")
    private String externalBaseUrl;

    @Bean
    public WebClient webClient() {
        return WebClient.builder()
                .baseUrl(externalBaseUrl)
                .build();
    }
}

3. Controller无打印的排查方案

如果确认修复完上述问题后Controller依旧没有输出,检查两点:

  • 你的Controller类上是否加了@RestController/@Controller注解,且/user端点的@PostMapping配置正确
  • Controller类所在的包是否在启动类WiremockdemoApplication的同级或子包下,否则Spring默认不会扫描到该Bean

可选优化

测试类中WebTestClient的请求不需要手动拼接端口,直接使用相对路径即可,WebTestClient会自动适配当前测试服务的随机端口:

byte[] temp = webTestClient.post()
        .uri("/user")
        .contentType(MediaType.APPLICATION_JSON)
        .body(BodyInserters.fromValue(createUser()))
        .exchange()
        .expectBody()
        .returnResult()
        .getResponseBody();

另外要确认WireMock用到的response.json文件放在src/test/resources/__files/目录下,否则WireMock会返回404错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:45:03