W omawianym przypadku zostanie przedstawiony sposób przesyłania obiektu w formacie JSON, do API.
Przekazywany obiekt
Dla przykładu – obiekt jaki jest przyjmowany przez API składa się z dwóch pól:
private double price; private String name;
Przykładowy obiekt, jaki może być przesyłany (zgodny z powyższą strukturą obiektu) ma następującą formę w JSON:
{"name":"mouse","price":5}
API
Dla dobrego zrozumienia przestawiam API do którego będę się odwoływał. Zmienna itemList stanowi Liste elementów typu Product.
@PostMapping("/addProduct") public void addProduct(@RequestBody Product product) { itemList.add(product); }
Implementacja
Po stronie klienta należy przesłać encje wraz z nagłówkiem informującym o formacie przesyłanych danych.
Aby to zrealizować posłużę się klasą RestTemplate. Podstawowe wykorzystanie znajdziesz w poprzednim artykule integracja z REST API
private static void addProductFromClient() { RestTemplate restTemplate = new RestTemplate(); String jsonToSent = "{\"name\":\"mouse\",\"price\":5}"; HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(HttpHeaders.CONTENT_TYPE, "application/json"); HttpEntity httpEntity = new HttpEntity(jsonToSent, httpHeaders); ResponseEntity exchange = restTemplate.exchange( "http://localhost:8080/addProduct", HttpMethod.POST, httpEntity, Void.class); }
W powyższej implementacji w postaci String zadeklarowany został przekazywany JSON. Dodatkowo należy poinformować odbiorcę, że to właśnie w tym formacie zostanie dostarczony obiekt. Dlatego też w linii 5 utworzony został nagłówek a w linii 6 dodana informacja o typie content’u.
W następnej kolejności została stworzona encja. Encja zawiera dwa wcześniej zdefiniowane elementy -> JSON (jsonToSent) + nagłówek (httpHeaders).
Obiekt encji zostaje uwzględniony w metodzie exchange (linia 13) i przesłany do API.
Przetestuj!
Przykładowa implementacja jest dostępna do pobrania w serwisie GitHub. Aplikacja zawiera w sobie zarówno API i jak i klienta. W pierwszej kolejności uruchom aplikacje Springboot’ową, a następnie uruchom klasę ProductApiClient.
https://github.com/bykowski/springboot-body-parameterized
W kolejnym kursie zostanie omówiony interfejs Retrofit.