Existe-t-il un autre moyen d’initialiser RestTemplate avec un URI de base autre que Étendre RestTemplate et écraser la méthode execute.
class CustomRestTemplate extends RestTemplate {
String baseUrl
@Override
protected T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor responseExtractor) throws RestClientException {
return super.doExecute(new URI(baseUrl + url.toString()), method, requestCallback, responseExtractor)
}
Printemps 5.0:
Cela envoie une demande GET à http://localhost:8080/myservice
RestTemplate restTemplate = new RestTemplate();
restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory("http://localhost:8080"));
restTemplate.getForObject("/myservice", String.class);
Vous pouvez créer votre DefaultUriTemplateHandler
personnalisé
DefaultUriTemplateHandler defaultUriTemplateHandler = new DefaultUriTemplateHandler();
defaultUriTemplateHandler.setBaseUrl(url);
Et puis ajoutez-le à restTemplate
return new RestTemplateBuilder()
.uriTemplateHandler(defaultUriTemplateHandler)
.build();
Si vous utilisez Spring Boot, vous pouvez utiliser org.springframework.boot.web.client.RestTemplateBuilder.rootUri(baseUrl).build()
RestTemplate
(version 4.2.0.RELEASE) de Spring prend en charge une méthode nommée setUriTemplateHandler
. Si cela n'est jamais défini, il contient une DefaultUriTemplateHandler
DefaultUriTemplateHandler
supporte une méthode nommée 'setBaseUrl`
Donc, vous pouvez définir l'URL de base ici.