Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Más información sobre las Views aquí.

Cliente en Spring Boot

Para consumir otro servicio REST desde el propio backend, podemos hacerlo utilizando RestTemplate:

Bloque de código
languagejava
final String url = "...";
final RestTemplate restTemplate = new RestTemplate();

Formamos el URI con UriComponentsBuilder:

Bloque de código
languagejava
// Uri
final URI uri = UriComponentsBuilder.fromHttpUrl( url ).path( "/" + "pidAplicationid" ).path( "/firma" )
		.queryParam( "parametro", "valor" ).queryParam( "otroParametro", "otroValor" ).build().encode().toUri();

Con .path, se concatena lo que indiquemos al path, y con .queryParam indicamos los parámetros que se pasan por la propia url.

Podemos añadir headers con HttpHeaders:

Bloque de código
languagejava
// HEADERS
final HttpHeaders headers = new HttpHeaders();
// Ponemos el tipo del contenido que irá en el body
headers.setContentType( MediaType.APPLICATION_JSON );
// Para indicar el accept, pide una lista de MediaType
final ArrayList<MediaType> listaAccept = new ArrayList<>();
listaAccept.add( MediaType.APPLICATION_JSON );
headers.setAccept( listaAccept );
// Añadimos header de nombre X-Client-Id con su valor correspondiente
headers.add( "X-Client-Id", ficha.getAplicacionId );

Los headers los incluiremos en un objeto HttpEntity, junto con el objeto a pasar si se pasa alguno:

Bloque de código
languagejava
// HttpEntity
final HttpEntity<String> httpEntity = new HttpEntity<>( objeto, headers );

Para lanzar las peticiones tenemos diferentes opciones. En primer lugar, disponemos de cuatro métodos básicos para hacer GET, POST, PUT, DELETE:

Bloque de código
languagejava
ResponseEntity<String> response1 = restTemplate.getForEntity( uri, String.class );
ResponseEntity<String> response2 = restTemplate.postForEntity( uri, httpEntity, String.class );
restTemplate.put( uri, httpEntity );
restTemplate.delete( uri );

Para las operaciones básicas estos métodos pueden ser útiles, pero como vemos, solo podemos pasar el objeto HttpEntity haciendo POST, pero podemos necesitar añadir headers en un GET para, por ejemplo, pasar un token de autenticación. Para hacer esto, podemos utilizar el método .exchange, al que tenemos que indicarle la Uri, el método http a utilizar, el objeto HttpEntity a pasar (puede ser null) y la clase del objeto que se espera recibir:

Bloque de código
languagejava
final ResponseEntity<String> response = restTemplate.exchange( uri, HttpMethod.GET, httpEntity, String.class );

Como vemos, estamos utilizando el tipo ResponseEntity. RestTemplate tiene métodos para obtener directamente el objeto del tipo que se espera, pero ResponseEntity nos permite explorar todos los detalles del mensaje, y podemos obtener el objeto correspondiente con .getBody().