Jul 17

Puñetitas con SpringBoot y RestTemplateBuilder

Cuando en Spring Boot queremos hacer un cliente REST, podemos usar RestTemplate. Esta clase permite hacer llamadas REST al servidor.
Para evitar en todas las llamadas poner la URL completa, se puede poner la URL base de esta forma

RestTemplateBuilder builder = new RestTemplateBuilder();
RestTemplate restTemplate = builder.rootUri(“http://loquesea.com/”).build();

// y a partir de aqui, para una llamada GET por ejemplo
restTemplate.getForObject(“/entidad”, ….);

En getForObject() no hace falta poner la URL completa, basta empezarla con / y el rootUri que añadiemos anteriormente se añade al principio.

Pues bien, esto funciona bien, pero cuando hice mi primera prueba, iluso de mí, se me ocurrió poner esto

RestTemplateBuilder builder = new RestTemplateBuilder();
builder.rootUri(“http://loquesea.com/”)
RestTemplate restTemplate = builder.build();

peeero … ¡¡eso no funciona!!. ¿Por qué?. Metiéndome en el código del método rootUri() me asombra ver

/**
* Set a root URL that should be applied to each request that starts with {@code ‘/’}.
* See {@link RootUriTemplateHandler} for details.
* @param rootUri the root URI or {@code null}
* @return a new builder instance
*/
public RestTemplateBuilder rootUri(String rootUri) {
return new RestTemplateBuilder(this.detectRequestFactory, rootUri,
this.messageConverters, this.requestFactorySupplier,
this.uriTemplateHandler, this.errorHandler, this.basicAuthorization,
this.restTemplateCustomizers, this.requestFactoryCustomizers,
this.interceptors);
}
}

Lo advierte el comentario, devuelve una nueva instancia, por lo que la rootUri no se guarda en la instancia actual. Así que esta llamada solo funciona si se pone todo seguido como en el primer ejemplo rootUri(..).build(), o si nos guardamos en una nueva variable lo que devuelve rootUri() para luego llamar a buld() de lo devuelto.

En fin, despista un poco.

Entradas relacionadas:

  • No hay entradas relacionadas.

Leave a Reply