如何让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
相关产品推荐
相关产品推荐

