Spracovanie údajov formulára zakódovaných do adresy URL na jar REST

ODPOČINOK Najlepšie

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

Pre koncového používateľa je proces odosielania formulárov pohodlný a do istej miery rovnocenný s jednoduchým zadaním údajov a kliknutím na tlačidlo odoslať. Z hľadiska inžinierstva je však potrebný kódovací mechanizmus na spoľahlivé odosielanie a prijímanie týchto údajov zo strany klienta na stranu servera na spracovanie typu back-end.

Pre rozsah tohto tutoriálu budeme zamerať sa na vytvorenie formulára, ktorý odosiela svoje údaje ako application / x-www-form-urlencoded Druh obsahu vo webovej aplikácii Spring.

2. Kódovanie údajov formulára

Najbežnejšie používanou metódou HTTP na odosielanie formulárov je POST. Na predloženie idempotentných formulárov však môžeme použiť aj metódu HTTP GET. Spôsob, ako určiť metódu, je prostredníctvom atribútu metódy vo formulári.

V prípade formulárov, ktoré používajú metódu GET, sa všetky údaje formulára odosielajú ako súčasť reťazca dotazu. Pokiaľ ale používame metódu POST, potom sa jej údaje odosielajú ako súčasť tela požiadavky HTTP.

Navyše v druhom prípade môžeme tiež špecifikujte kódovanie údajov pomocou formulára enctype atribút, ktorý môže nadobúdať dve hodnoty, a to application / x-www-form-urlencoded a multipart / form-data.

2.1. Typ média application / x-www-form-urlencoded

HTML formuláre majú predvolenú hodnotu application / x-www-form-urlencoded pre enctype atribút pretože sa to postará o základné prípady použitia, keď sú údaje výlučne textové. Ak však náš prípad použitia zahŕňa podporu údajov súboru, budeme ich musieť prepísať hodnotou multipart / form-data.

V zásade odosiela údaje formulára ako páry kľúč - hodnota oddelené znakom ampersand (&). Príslušný kľúč a hodnota sú tiež oddelené znamienkom rovná sa (=). Ďalej sú všetky vyhradené a nealfanumerické znaky kódované pomocou percentuálneho kódovania.

3. Odoslanie formulára v prehľadávači

Teraz, keď už máme pokryté základné informácie, poďme ďalej a uvidíme, ako to bude možné spracúvajte údaje z formulára zakódované pre jednoduchý prípad použitia spätnej väzby vo webovej aplikácii Spring.

3.1. Doménový model

V prípade nášho formulára spätnej väzby musíme spolu s komentárom zachytiť e-mailový identifikátor odosielateľa. Poďme teda vytvoriť náš doménový model v a Spätná väzba trieda:

public class Feedback {private String emailId; súkromný reťazcový komentár; }

3.2. Vytvorte formulár

Ak chcete na vytvorenie nášho dynamického webového formulára použiť jednoduchú šablónu HTML, budeme musieť v našom projekte nakonfigurovať Thymeleaf. Potom sme pripravení pridať a ZÍSKAŤ koncový bod / spätná väzba ktorý bude slúžiť spätná väzba pohľad na formulár:

@GetMapping (path = "/ feedback") public String getFeedbackForm (model model) {Feedback feedback = new Feedback (); model.addAttribute ("spätná väzba", spätná väzba); vrátiť "spätnú väzbu"; }

Všimnite si, že to používame spätná väzba ako modelový atribút na zachytenie vstupu používateľa. Ďalej, poďme vytvoriťspätná väzba pohľad v feedback.html šablóna:

Samozrejme, nemusíme výslovne špecifikovať enctype atribút, pretože vyberie predvolenú hodnotu application / x-www-form-urlencoded.

3.3. PRG Flow

Pretože prijímame vstupy používateľov prostredníctvom formulára spätnej väzby k prehliadaču, musíme implementujte pracovný postup odosielania POST / REDIRECT / GET (PRG), aby ste sa vyhli duplicitným odoslaním.

Najskôr implementujme koncový bod POST / web / spätná väzba ktorý bude pôsobiť ako obslužný program akcie pre formulár spätnej väzby:

@PostMapping (path = "/ web / feedback", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public String handleBrowserSubmissions (spätná väzba) vyvolá výnimku {// Uložiť spätnú väzbu dátový návrat "redirect: / feedback / success"; }

Ďalej môžeme implementovať koncový bod presmerovania / spätná väzba / úspech ktorý slúži na požiadavku GET:

@GetMapping ("/ feedback / success") public ResponseEntity getSuccess () {return new ResponseEntity ("Ďakujeme za odoslanie spätnej väzby.", HttpStatus.OK); }

Ak si chcete overiť funkčnosť pracovného toku odosielania formulárov v prehliadači, navštívte stránku localhost: 8080 / spätná väzba:

Nakoniec môžeme tiež skontrolovať, či sa údaje formulára odosielajú vo forme kódovanej URL:

emailId = abc% 40example.com & comment = Ukážka + spätná väzba

4. Žiadosti iné ako prehľadávač

Niekedy nemusíme mať klienta HTTP založeného na prehliadači. Namiesto toho by našim klientom mohla byť pomôcka ako cURL alebo Postman. V takom prípade nepotrebujeme webový formulár HTML. Namiesto toho môžeme implementovať a / spätná väzba koncový bod, ktorý slúži na požiadavku POST:

@PostMapping (path = "/ feedback", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public ResponseEntity handleNonBrowserSubmissions (@RequestBody Feedback feedback) vyvolá výnimku {// Uložiť dáta spätnej väzby vrátiť novú ResponseEntity ("Ďakujeme za odoslanie spätnej väzby", HOK) ); }

Ak v našom dátovom toku chýba forma HTML, nemusíme nevyhnutne implementovať vzor PRG. Avšak musíme určiť, že zdroj akceptuje APPLICATION_FORM_URLENCODED_VALUE Typ média.

Nakoniec to môžeme otestovať s požiadavkou cURL:

curl -X POST \ // localhost: 8080 / spätná väzba \ -H 'typ obsahu: application / x-www-form-urlencoded' \ -d 'emailId = abc% 40example.com & comment = vzorka% 20 spätná väzba'

4.1. FormHttpMessageConverter Základy

Žiadosť HTTP, ktorá sa odosiela application / x-www-form-urlencoded údaje to musia špecifikovať v Druh obsahu hlavička. Jar interne používa FormHttpMessageConverter triedy, aby tieto dáta prečítala a spojila s parametrom metódy.

V prípadoch, keď je náš parameter metódy typu MultiValueMap, môžeme použiť buď @RequestParam alebo @RequestBody anotácia, aby sa táto väzba primerane spojila s telom požiadavky HTTP. Je to tak preto, lebo Servlet API kombinuje parametre dotazu a údaje formulára do jednej nazvanej mapy parametre, a to zahŕňa automatickú analýzu tela žiadosti:

@PostMapping (cesta = "/ spätná väzba", konzumuje = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) verejná ResponseEntity handleNonBrowserSubmissions (@RequestParam MultiValueMap paramMap) vyvolá výnimku {// Uložiť spätnú väzbu vrátiť novú spätnú väzbu Hlásiť, ); }

Avšak pre parameter metódy iného typu ako MultiValueMap, ako je náš Spätná väzba objekt domény, musíme používať iba doménu @RequestBody anotácia.

5. Záver

V tomto tutoriáli sme sa stručne dozvedeli o kódovaní údajov z formulárov do webových formulárov. Preskúmali sme tiež, ako spracovať údaje kódované pomocou URL pre požiadavky HTTP a prehľadávača HTTP, a to implementáciou formulára spätnej väzby do webovej aplikácie Spring Boot.

Kompletný zdrojový kód tutoriálu je ako vždy k dispozícii na GitHub.

REST spodok

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

$config[zx-auto] not found$config[zx-overlay] not found