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

Spring 5.0中为RestTemplate设置基础URL/URI的方法

在Spring Boot 2中给RestTemplate配置可配置的基础URL

嗨,我之前也碰到过这个问题——旧版本RestTemplate的baseUrl构造方法确实被弃用了,不过用DefaultUriTemplateHandler完全能搞定,还能结合配置属性灵活切换环境,给你一步步拆解下:

步骤1:在配置文件中定义基础URL

先把基础URL放到配置文件里(比如application.yml),这样开发、测试、生产环境能轻松切换:

# application.yml
app:
  api:
    base-url: https://api.your-domain.com/v1

步骤2:创建RestTemplate Bean并配置UriTemplateHandler

接下来自定义RestTemplate的Bean,把DefaultUriTemplateHandler配置进去,同时绑定配置文件里的baseUrl:

首先写一个简单的属性绑定类,用来读取配置:

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "app.api")
public class ApiProperties {
    private String baseUrl;

    // Getter和Setter
    public String getBaseUrl() {
        return baseUrl;
    }

    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }
}

然后在配置类里创建RestTemplate:

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.DefaultUriTemplateHandler;

@Configuration
@EnableConfigurationProperties(ApiProperties.class)
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ApiProperties apiProperties) {
        RestTemplate restTemplate = new RestTemplate();
        
        // 初始化DefaultUriTemplateHandler并设置基础URL
        DefaultUriTemplateHandler uriHandler = new DefaultUriTemplateHandler();
        uriHandler.setBaseUrl(apiProperties.getBaseUrl());
        // 可选:设置编码模式,避免中文或特殊字符编码问题
        uriHandler.setEncodingMode(DefaultUriTemplateHandler.EncodingMode.URI_COMPONENT);
        
        // 把配置好的UriHandler绑定给RestTemplate
        restTemplate.setUriTemplateHandler(uriHandler);
        
        return restTemplate;
    }
}

步骤3:使用RestTemplate发送请求

现在发送请求时只需要写相对路径,RestTemplate会自动拼接基础URL:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public User getUserById(Long userId) {
        // 实际请求的URL是:https://api.your-domain.com/v1/users/{userId}
        return restTemplate.getForObject("/users/{id}", User.class, userId);
    }
}

小提醒

  • 不用纠结基础URL结尾要不要加斜杠:DefaultUriTemplateHandler会自动处理拼接逻辑,不管baseUrl是https://api.your-domain.com/v1还是https://api.your-domain.com/v1/,和相对路径/users拼接后都会得到正确的https://api.your-domain.com/v1/users
  • 如果需要更复杂的URL处理逻辑,还可以自定义UriTemplateHandler子类,不过大部分场景下DefaultUriTemplateHandler足够用了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:02:35