Az URL kódolt űrlapadatok kezelése tavaszi REST-ben

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. Áttekintés

A végfelhasználó számára az űrlapküldés folyamata kényelmes, és bizonyos mértékig egyenértékű azzal, hogy egyszerűen be kell írni az adatokat és rákattintani a beküldés gombra. Mérnöki szempontból azonban kódolási mechanizmusra van szükség az adatok megbízható küldéséhez és fogadásához az ügyfél oldalról a szerver oldalra háttér-feldolgozás céljából.

A bemutató terjedelmét illetően meg fogjuk tenni összpontosítson egy űrlap létrehozására, amely az adatokat küldi application / x-www-form-urlencoded tartalom típus tavaszi webalkalmazásban.

2. Form adatkódolás

Az űrlapok beküldéséhez a leggyakrabban használt HTTP módszer a POST. Az idempotens űrlapok beküldéséhez azonban használhatjuk a HTTP GET metódust is. És a módszer megadásának módja az űrlap metódus attribútumán keresztül történik.

A GET metódust használó űrlapok esetében a teljes űrlapadatokat a lekérdezési karakterlánc részeként küldjük el. De ha a POST metódust használjuk, akkor annak adatait a HTTP kérés törzsének részeként küldjük el.

Sőt, az utóbbi esetben azt is megtehetjük adja meg az adatok kódolását az űrlaphoz enctype tulajdonság, amely két értéket vehet fel, mégpedig application / x-www-form-urlencoded és többrészes / űrlap-adat.

2.1. Média típus application / x-www-form-urlencoded

HTML az űrlapok alapértelmezett értéke application / x-www-form-urlencoded a enctype tulajdonság mivel ez gondoskodik azokról az alapvető felhasználási esetekről, amikor az adatok teljes egészében szövegesek. Mindazonáltal, ha a felhasználási esetünk fájladatokat támogat, akkor ezeket felül kell írnunk többrészes / űrlap-adat.

Lényegében az űrlapadatokat kulcsérték-párokként küldi, ampersand (&) karakterrel elválasztva. Ezenkívül a megfelelő kulcsot és értéket el kell választani az egyenlőségjellel (=). Ezenkívül az összes fenntartott és nem alfanumerikus karaktert kódoljuk százalékos kódolással.

3. Beküldés a böngészőben

Most, hogy áttekintettük az alapjainkat, menjünk előre, és nézzük meg, hogyan tudunk kezelje az URL kódolt űrlapadatokat a visszajelzés beküldésének egyszerű felhasználási esete érdekében tavaszi webalkalmazásban.

3.1. Domain modell

Visszajelzési űrlapunkhoz rögzítenünk kell a beküldő e-mail azonosítóját a megjegyzéssel együtt. Tehát hozzuk létre a sajátunkat domain modell a Visszacsatolás osztály:

nyilvános osztály Visszajelzés {private String emailId; privát karakterlánc megjegyzés; }

3.2. Űrlap létrehozása

Egyszerű HTML-sablon használatához dinamikus webes űrlapunk létrehozásához a projektünkben konfigurálnunk kell a Thymeleaf-et. Ezek után készen állunk a GET végpont /Visszacsatolás hogy szolgálni fogja a Visszacsatolás nézet az űrlaphoz:

@GetMapping (path = "/ feedback") public String getFeedbackForm (modell modell) {Visszajelzés visszajelzés = új Visszajelzés (); model.addAttribute ("visszajelzés", visszajelzés); return "visszajelzés"; }

Ne feledje, hogy használjuk Visszacsatolás mint modellattribútum a felhasználói bemenet rögzítésére. Ezután menjünk hozza létre aVisszacsatolás nézet a feedback.html sablon:

Természetesen nem kell kifejezetten megadnunk a enctype attribútumot, mivel kiválasztja az alapértelmezett értéket application / x-www-form-urlencoded.

3.3. PRG Flow

Mivel a felhasználói visszajelzéseket a böngésző visszajelzési űrlapján keresztül fogadjuk el, meg kell tennünk hajtsa végre a POST / REDIRECT / GET (PRG) beküldési munkafolyamatot az ismétlődő beküldések elkerülése érdekében.

Először valósítsuk meg a POST végpontot / web / feedback amely a visszajelzési űrlap műveletkezelőjeként fog működni:

@PostMapping (elérési út = "/ web / feedback", fogyaszt = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public String handleBrowserSubmissions (Visszajelzés visszajelzés) dobja a Kivételt {// Visszajelzés mentése adat visszatér "redirect: / feedback / siker"; }

Ezután megvalósíthatjuk az átirányítási végpontot / visszajelzés / siker amely egy GET kérést szolgál ki:

@GetMapping ("/ feedback / siker") public ResponseEntity getSuccess () {return new ResponseEntity ("Köszönjük, hogy visszajelzést küldtél.", HttpStatus.OK); }

Az űrlapküldési munkafolyamatok böngészőben történő érvényesítéséhez látogasson el localhost: 8080 / feedback:

Végül azt is ellenőrizhetjük, hogy az űrlapadatokat az URL kódolású formában küldik-e:

emailId = abc% 40example.com & comment = Minta + Visszajelzés

4. Nem böngésző kérések

Időnként előfordulhat, hogy nincs böngészőalapú HTTP kliensünk. Ehelyett az ügyfelünk olyan segédprogram lehet, mint a cURL vagy a Postman. Ilyen esetben nincs szükségünk a HTML webes űrlapra. Ehelyett megvalósíthatjuk a /Visszacsatolás a POST kérést kiszolgáló végpont:

A @PostMapping (elérési út = "/ feedback", fogyaszt = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) nyilvános ResponseEntity handleNonBrowserSubmissions (@RequestBody Feedback feedback) kivételt dob ​​{// Visszajelzési adatok mentése adja vissza az új ResponseEntity-t ("Köszönjük, hogy visszajelzést küldtél, Htt ); }

Ha HTML adatlap nincs adatfolyamunkban, akkor nem feltétlenül kell végrehajtanunk a PRG mintát. Azonban, meg kell adnunk, hogy az erőforrás elfogadja APPLICATION_FORM_URLENCODED_VALUE média típus.

Végül egy cURL kéréssel tesztelhetjük:

curl -X POST \ // localhost: 8080 / feedback \ -H 'Tartalomtípus: application / x-www-form-urlencoded' \ -d 'emailId = abc% 40example.com & comment = Minta% 20Feedback'

4.1. FormHttpMessageConverter Alapok

Küldő HTTP kérés application / x-www-form-urlencoded adatoknak meg kell adniuk ezt a Tartalom típus fejléc. Belsőleg Spring használja a FormHttpMessageConverter osztály, hogy olvassa el ezeket az adatokat, és kösse össze a method paraméterrel.

Azokban az esetekben, amikor a módszer paraméterünk egy típusú MultiValueMap, használhatjuk a @RequestParam vagy @ RequestBody megjegyzés, hogy megfelelően kösse össze a HTTP kérés törzsével. Ez azért van, mert a Servlet API egyesíti a lekérdezés paramétereit és az űrlap adatait egyetlen nevezett térképpé paraméterek, és ez magában foglalja a kérelem törzsének automatikus elemzését:

@PostMapping (elérési út = "/ feedback", fogyaszt = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) nyilvános ResponseEntity handleNonBrowserSubmissions (@RequestParam MultiValueMap paramMap) dobja a Kivételt {// Visszajelzési adatok mentése adja vissza az új ResponseEttity visszajelzést ("Köszönöm, beküldte ); }

Azonban, típusú metódus-paraméterhez MultiValueMap, mint például a mi Visszacsatolás domain objektumot, csak a @ RequestBody annotáció.

5. Következtetés

Ebben az oktatóanyagban röviden megismertük az űrlapadatok webes űrlapokban történő kódolását. Azt is megvizsgáltuk, hogyan lehet kezelni az URL-sel kódolt adatokat a böngésző és a nem böngésző HTTP kéréseihez egy visszajelzési űrlap megvalósításával a Spring Boot webalkalmazásban.

Mint mindig, az oktatóanyag teljes forráskódja elérhető 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