RestTemplate Post Request with JSON

REST felső

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Bemutatkozás

Ebben a gyors bemutatóban bemutatjuk a Spring's használatát RestTemplate hogy JSON tartalmat küldő POST kéréseket tegyen.

2. A példa beállítása

Kezdjük egy egyszerű hozzáadásával Személy modellosztály a feladandó adatok képviseletére:

nyilvános osztály Személy {magán egész szám; privát karakterlánc neve; // szabványos kivitelező, mérőeszközök, beállítók}

Valakivel együtt dolgozni Személy objektumokat, felvesszük a PersonService interfész és megvalósítás két módszerrel:

nyilvános felület PersonService {public Person saveUpdatePerson (Személy személy); public Person findPersonById (Egész id); }

Ezeknek a módszereknek a megvalósítása egyszerűen visszaad egy objektumot. Ennek a rétegnek a dummy megvalósítását használjuk itt, hogy a webes rétegre koncentrálhassunk.

3. REST API beállítása

Definiáljunk egy egyszerű REST API-t a sajátunkhoz Személy osztály:

@PostMapping (value = "/ createPerson", fogyaszt = "application / json", tuottaa = "application / json") public Person createPerson (@RequestBody Person person) {return personService.saveUpdatePerson (person); } @PostMapping (érték = "/ updatePerson", fogyaszt = "alkalmazás / json", termel = "alkalmazás / json") public Person updatePerson (@RequestBody személy, HttpServletResponse válasz) {response.setHeader ("Location", ServletUriComponentsBuilder. fromCurrentContextPath () .path ("/ findPerson /" + person.getId ()). toUriString ()); return personService.saveUpdatePerson (személy); }

Ne feledje, hogy az adatokat JSON formátumban szeretnénk közzétenni. Ennek érdekében hozzáadtuk a fogyaszt attribútum a @PostMapping kommentár az „application / json” értékkel mindkét módszer esetében.

Hasonlóképpen beállítjuk a termel attribútum az „application / json” kifejezésre, hogy elmondja Springnek, hogy a válasz törzsét JSON formátumban szeretnénk megadni.

Jegyzeteltük a személy paraméter a @ RequestBody annotáció mindkét módszerhez. Ez megmondja Springnek, hogy a személy az objektum a HTTP kérés.

Végül mindkét módszer a Személy objektum, amely a választesthez lesz kötve. Megjegyezzük, hogy az API osztályunkat a következővel jegyezzük fel @RestController hogy az összes API metódust rejtettel jelölje meg @ResponseBody annotáció.

4. Használata RestTemplate

Most írhatunk néhány egységtesztet a tesztelésre Személy REST API. Itt, megpróbálunk POST kéréseket küldeni a Személy API az. Által biztosított POST módszerek használatával RestTemplate: postForObject, postForEntity, és postForLocation.

Mielőtt elkezdenénk végrehajtani az egységtesztjeinket, definiáljunk egy beállítási módszert az összes egységteszt-módszerünkben használt objektumok inicializálásához:

@BeforeClass public static void runBeforeAllTestMethods () {createPersonUrl = "// localhost: 8082 / spring-rest / createPerson"; updatePersonUrl = "// localhost: 8082 / spring-rest / updatePerson"; restTemplate = new RestTemplate (); fejlécek = new HttpHeaders (); fejlécek.setContentType (MediaType.APPLICATION_JSON); personJsonObject = új JSONObject (); personJsonObject.put ("id", 1); personJsonObject.put ("név", "John"); }

A beállítási módszer mellett vegye figyelembe, hogy a következő leképezőre hivatkozunk a JSON karakterlánc konvertálásához a-ba JSONNode objektum az egység tesztjeinken:

private final ObjectMapper objectMapper = új ObjectMapper ();

Ahogy korábban említettem, az adatokat JSON formátumban szeretnénk közzétenni. Ennek elérése érdekében hozzáadunk egy Tartalom típus fejléc kérésünkre a APPLICATION_JSON média típus.

Tavaszi HttpHeaders osztály különböző módszereket biztosít a fejlécek eléréséhez. Itt állítottuk be a Tartalom típus fejléc alkalmazás / json felhívásával a setContentType módszer. Csatoljuk a fejlécek tiltakozzon kéréseink ellen.

4.1. JSON feladása a következővel: postForObject

RestTemplate’S postForObject metódus új erőforrást hoz létre egy objektum feladásával az adott URI sablonba. Visszaadja az eredményt automatikusan konvertálva a fájlban megadott típusra responseType paraméter.

Tegyük fel, hogy POST kérést szeretnénk benyújtani a mi telefonunkhoz Személy API új létrehozásához Személy objektumot, és adja vissza ezt az újonnan létrehozott objektumot a válaszban.

Először építjük a kérés típusú objektum HttpEntity alapján personJsonObject és a fejléceket tartalmazó Tartalom típus. Ez lehetővé teszi a postForObject módszer a JSON kéréstest küldésére:

@Test public void givenDataIsJson_whenDataIsPostedByPostForObject_thenResponseBodyIsNotNull () dobja az IOException {HttpEntity request = új HttpEntity (personJsonObject.toString (), fejléceket); String personResultAsJsonStr = restTemplate.postForObject (createPersonUrl, request, String.class); JsonNode gyökér = objectMapper.readTree (personResultAsJsonStr); assertNotNull (personResultAsJsonStr); assertNotNull (gyökér); assertNotNull (root.path ("név"). asText ()); }

A postForObject () A módszer a választestet a-ként adja vissza Húr típus.

Visszaadhatjuk a választ a-ként is Személy objektumot a responseType paraméter:

Személy személy = restTemplate.postForObject (createPersonUrl, kérés, Személy.osztály); assertNotNull (személy); assertNotNull (person.getName ());

Valójában a kéréskezelő módszerünk illeszkedik a createPersonUrl Az URI a válasz törzsét JSON formátumban állítja elő.

De ez nem korlátozás számunkra - postForObject képes automatikusan átalakítani a válasz testet a kért Java típusra (pl. Húr, Személy) meghatározott responseType paraméter.

4.2. JSON feladása a következővel: postForEntity

Összehasonlítva postForObject (), postForEntity () a választ a-ként adja vissza ResponseEntity tárgy. Ezen kívül mindkét módszer ugyanazt a munkát végzi.

Tegyük fel, hogy POST kérést szeretnénk benyújtani a mi telefonunkhoz Személy API új létrehozásához Személy objektumot, és adja vissza a választ a-ként ResponseEntity.

Használhatjuk a postForEntity módszer ennek megvalósítására:

@Test public void givenDataIsJson_whenDataIsPostedByPostForEntity_thenResponseBodyIsNotNull () dobja az IOException {HttpEntity request = új HttpEntity (personJsonObject.toString (), fejléceket); ResponseEntity responseEntityStr = restTemplate. postForEntity (createPersonUrl, request, String.class); JsonNode gyökér = objectMapper.readTree (responseEntityStr.getBody ()); assertNotNull (responseEntityStr.getBody ()); assertNotNull (root.path ("név"). asText ()); }

Hasonló a postForObject, postForEntity rendelkezik a responseType paraméter a válasz törzsének a kért Java típusra konvertálásához.

Itt vissza tudtuk adni a válasz testet a ResponseEntity.

Visszaadhatjuk a választ a-ként is ResponseEntity objektumot a responseType paraméter a Személy.osztály:

ResponseEntity responseEntityPerson = restTemplate. postForEntity (createPersonUrl, request, Person.class); assertNotNull (responseEntityPerson.getBody ()); assertNotNull (responseEntityPerson.getBody (). getName ());

4.3. JSON kiküldése a következővel: postForLocation

Hasonló a postForObject és postForEntity mód, postForLocation új erőforrást is létrehoz azáltal, hogy az adott objektumot feltünteti az adott URI-ba. Az egyetlen különbség az, hogy visszaadja a Elhelyezkedés fejléc.

Ne feledje, már láttuk, hogyan kell beállítani a Elhelyezkedés fejlécében egy válasz a mi updatePerson A fenti REST API módszer:

response.setHeader ("Hely", ServletUriComponentsBuilder.fromCurrentContextPath () .path ("/ findPerson /" + person.getId ()). toUriString ());

Most képzeljük el vissza akarjuk adni a Elhelyezkedés A válasz fejlécét a személy az általunk kifüggesztett tárgy.

Ezt a postForLocation módszer:

@Test public void givenDataIsJson_whenDataIsPostedByPostForLocation_thenResponseBodyIsTheLocationHeader () dobja a JsonProcessingException {HttpEntity request = új HttpEntity (personJsonObject.toString (), fejléceket); URI locationHeader = restTemplate.postForLocation (updatePersonUrl, kérés); assertNotNull (locationHeader); }

5. Következtetés

Ebben a cikkben feltártuk a használat módját RestTemplate hogy POST kérést tegyen a JSON-nal.

Mint mindig, az összes példa és kódrészlet megtalálható a GitHubon.

REST alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT