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

如何让RestClient像TestRestTemplate一样自动解析主机为localhost及本地端口?

解决RestClient替换TestRestTemplate时缺少主机名的问题

问题根源

TestRestTemplate在Spring集成测试中会自动配置测试服务器的基础URL(如http://localhost:xxxx),但直接通过testRestTemplate.getRestTemplate()创建RestClient时,RestClient不会继承这个基础URL配置,导致仅使用相对路径时无法识别主机地址。

解决方法

  • 方法一:显式设置RestClient的基础URL
    利用TestRestTemplate的getRootUri()获取预设的基础地址,在构建RestClient时配置:

    RestClient restClient = RestClient.builder()
        .baseUrl(testRestTemplate.getRootUri())
        .build();
    restClient.get().uri("/actuator/health").retrieve().toEntity(String.class);
    
  • 方法二:复用原有RestTemplate配置+设置基础URL
    如果需要保留TestRestTemplate里RestTemplate的自定义配置(如拦截器、消息转换器),可以在构建时传入原有RestTemplate并补充baseUrl:

    RestClient restClient = RestClient.builder(testRestTemplate.getRestTemplate())
        .baseUrl(testRestTemplate.getRootUri())
        .build();
    restClient.get().uri("/actuator/health").retrieve().toEntity(String.class);
    
  • 方法三:直接使用完整URI
    不设置baseUrl,直接在请求时拼接完整地址,这种方式适合临时场景:

    restClient.get().uri(testRestTemplate.getRootUri() + "/actuator/health")
        .retrieve().toEntity(String.class);
    

内容的提问来源于stack exchange,提问作者Radek Postołowicz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:34:55