Az URL kódolt űrlapadatok kezelése tavaszi REST-ben
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 FOLYAMATOT1. Á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ó