Klasa RestTemplate pozwala na wymianę danych z REST API.
W zależności od metody HTTP z którą zajdzie komunikacja można odpowiednio sparametryzować metodę exchange – domyślnie służącą do wymiany danych tak, aby odpytywała o metody webowe:
- GET,
- HEAD,
- POST,
- PUT,
- PATCH,
- DELETE,
- OPTIONS,
- TRACE;
Oprócz tego metoda jest wstanie przekazywać dane do metody webowej poprzez (Parametryzacja metod REST):
- Nagłówek
- Parametr
- Ścieżkę (adres)
- Ciało
Przykłady
Get z parametrem
Przykład pierwszy opisuje sposób łączenia się z metodą GET dostępną pod adresem https://bykowski.pl/materials/HttpExample.php. Przyjmuje ona parametr o nazwie name. Dlatego jako pierwszy argument metody exchange podawany jest adres wraz z parametrami tak jak to widać na listingu poniżej.
Kolejnym elementem jest typ odpytywanej metody – w tym przypadku GET.
Następnym argumentem jest przezywana encja. Encja może nieść ze sobą informacje na temat nagłówka czy ciała. Jednak w przypadku tego API jest to zbyteczne.
Ostatnim elementem jest tym zwracany. Ponieważ metoda zwraca odpowiedź w postaci łańcucha znaków toteż typ zwrotny zostanie ustawiony na String.class.
Metoda zwraca ResponseEntity<T> gdzie parametr T oznacza typ zwracany. Zgodnie z deklaracją typu zwracanego jako łańcucha, to typem zwracanym będzie ResponseEntity<String>.
Aby pobrać odpowiedź zwracaną trzeba posłużyć się metodą getBody();
public String callGet() { RestTemplate rest = new RestTemplate(); ResponseEntity<String> exchange = rest.exchange( "https://bykowski.pl/materials/HttpExample.php?name=Przemek", HttpMethod.GET, HttpEntity.EMPTY, String.class); return exchange.getBody(); }
POST z body
Kolejna metoda przyjmuje parametry przez body. Dlatego nie można przekazać tych informacji w URL. W tym celu trzeba stworzyć encje oraz podać do niej właściwe dane. Encja przyjmuje ciało i nagłówek. Do przekazania ciała posłuży para danych klucz-wartość. Natomiast nagłówek pozostanie pusty ponieważ nie ma konieczności zawierania w nim informacji.
Na koniec należy przekazać tworzoną encje do metody, oraz ustawienie metody na POST.
public String callPost() { RestTemplate rest = new RestTemplate(); MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>(); map.add("name", "Przemek"); HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(map, new HttpHeaders()); ResponseEntity<String> exchange = rest.exchange( "https://bykowski.pl/materials/HttpExample.php", HttpMethod.POST, httpEntity, String.class); return exchange.getBody(); }
Przykładowa aplikacja
Aby zobaczyć przykładowe możliwości zastosowania API wykorzystany został projekt – HTTP communicator
W kolejnym kursie zostaną opasane zasady przesyłania obiektów z wykorzystaniem RestTemplate.