Saltar al contenido

Spring RestTemplate GET con parámetros

Solución:

Para manipular fácilmente URL / ruta / parámetros / etc., puede usar la clase UriComponentsBuilder de Spring. Es más limpio que concatenar cadenas manualmente y se encarga de la codificación de URL por usted:

HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
        .queryParam("msisdn", msisdn)
        .queryParam("email", email)
        .queryParam("clientVersion", clientVersion)
        .queryParam("clientType", clientType)
        .queryParam("issuerName", issuerName)
        .queryParam("applicationName", applicationName);

HttpEntity<?> entity = new HttpEntity<>(headers);

HttpEntity<String> response = restTemplate.exchange(
        builder.toUriString(), 
        HttpMethod.GET, 
        entity, 
        String.class);

Las uriVariables también se expanden en la cadena de consulta. Por ejemplo, la siguiente llamada expandirá los valores tanto para la cuenta como para el nombre:

restTemplate.exchange("http://my-rest-url.org/rest/account/{account}?name={name}",
    HttpMethod.GET,
    httpEntity,
    clazz,
    "my-account",
    "my-name"
);

por lo que la URL de solicitud real será

http://my-rest-url.org/rest/account/my-account?name=my-name

Consulte HierarchicalUriComponents.expandInternal (UriTemplateVariables) para obtener más detalles. La versión de Spring es 3.1.3.

Desde al menos Spring 3, en lugar de usar UriComponentsBuilder para construir la URL (que es un poco detallada), muchos de El RestTemplate Los métodos aceptan marcadores de posición en la ruta de los parámetros (no solo exchange).

De la documentación:

Mucho de RestTemplate métodos acepta una plantilla de URI y variables de plantilla de URI, ya sea como un String vararg, o como
Map<String,String>.

Por ejemplo con un String vararg:

restTemplate.getForObject(
   "http://example.com/hotels/{hotel}/rooms/{room}", String.class, "42", "21");

O con un Map<String, String>:

Map<String, String> vars = new HashMap<>();
vars.put("hotel", "42");
vars.put("room", "21");

restTemplate.getForObject("http://example.com/hotels/{hotel}/rooms/{room}", 
    String.class, vars);

Referencia: https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-resttemplate-uri

Si miras el JavaDoc para RestTemplate y busque “Plantilla URI”, puede ver con qué métodos puede usar marcadores de posición.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *