Spring: 如何从 RestTemplate 获取根 Url
Spring: how to get rootUri from RestTempalte
我正在使用此配置 class 来初始化 RestTemplate:
@Configuration
public class RestTemplateConfig {
@Value("${endpoint-url}")
private String endpointUrl;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.rootUri(endpointUrl)
.messageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
}
在我的服务方法之一中,我使用代码:
RootUriTemplateHandler handler = (RootUriTemplateHandler) restTemplate.getUriTemplateHandler();
String uri = handler.getRootUri();
restTemplate.postForLocation(uri, request);
获取这个URI。是否有更简单的方法来获取此 rootUri(无需强制转换)?还是直接向rootUri执行post请求?
听起来您正试图使用 RestTemplate
传递 ${endpoint-url}
的值。看起来有点笨拙的演员阵容有效,但您或许可以考虑以下替代方案之一:
创建一个封装 endpointUrl
和您的 restTemplate
的提供程序,并在需要 endpointUrl
或 restTemplate
的任何地方注入此提供程序。例如:
@Component
public class RestTemplateProvider {
@Value("${endpoint-url}")
private String endpointUrl;
private final RestTemplate restTemplate;
@Autowired
public RestTemplateProvider(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.rootUri(endpointUrl)
.messageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
public RestTemplate provide() {
return restTemplate;
}
public String getEndpointUrl() {
return endpointUrl;
}
}
将 @Value("${endpoint-url}") private String endpointUrl;
注入服务 class 需要它的地方。
您可以直接对rootUri 执行post 请求,只要您提供给restTemplate.postForLocation 的uri 以“/”开头即可。在这种情况下,Spring 将自动添加 restTemplate 构造函数中提供的 baseURI。
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder,
@Value("${endpoint-url}") String endpointUrl) {
return builder
.rootUri(endpointUrl)
.messageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
}
在您的服务方法中:
// Make a POST call to ${endpoint-url}/foobar
String uri = "/foobar"; // The leading "/" is important!
restTemplate.postForLocation(uri, request);
restTemplate.getUriTemplateHandler().展开("/")
我正在使用此配置 class 来初始化 RestTemplate:
@Configuration
public class RestTemplateConfig {
@Value("${endpoint-url}")
private String endpointUrl;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.rootUri(endpointUrl)
.messageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
}
在我的服务方法之一中,我使用代码:
RootUriTemplateHandler handler = (RootUriTemplateHandler) restTemplate.getUriTemplateHandler();
String uri = handler.getRootUri();
restTemplate.postForLocation(uri, request);
获取这个URI。是否有更简单的方法来获取此 rootUri(无需强制转换)?还是直接向rootUri执行post请求?
听起来您正试图使用 RestTemplate
传递 ${endpoint-url}
的值。看起来有点笨拙的演员阵容有效,但您或许可以考虑以下替代方案之一:
创建一个封装
endpointUrl
和您的restTemplate
的提供程序,并在需要endpointUrl
或restTemplate
的任何地方注入此提供程序。例如:@Component public class RestTemplateProvider { @Value("${endpoint-url}") private String endpointUrl; private final RestTemplate restTemplate; @Autowired public RestTemplateProvider(RestTemplateBuilder restTemplateBuilder) { this.restTemplate = restTemplateBuilder.rootUri(endpointUrl) .messageConverters(new MappingJackson2HttpMessageConverter()) .build(); } public RestTemplate provide() { return restTemplate; } public String getEndpointUrl() { return endpointUrl; } }
将
@Value("${endpoint-url}") private String endpointUrl;
注入服务 class 需要它的地方。
您可以直接对rootUri 执行post 请求,只要您提供给restTemplate.postForLocation 的uri 以“/”开头即可。在这种情况下,Spring 将自动添加 restTemplate 构造函数中提供的 baseURI。
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder,
@Value("${endpoint-url}") String endpointUrl) {
return builder
.rootUri(endpointUrl)
.messageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
}
在您的服务方法中:
// Make a POST call to ${endpoint-url}/foobar
String uri = "/foobar"; // The leading "/" is important!
restTemplate.postForLocation(uri, request);
restTemplate.getUriTemplateHandler().展开("/")