Rukovanje podacima kodiranim obrascima u proljeće REST

OSTALO Vrh

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

Za krajnjeg korisnika postupak predaje obrasca prikladan je i donekle je ekvivalentan unosu podataka i kliku na gumb za slanje. Međutim, iz inženjerske perspektive potreban je mehanizam kodiranja da bi se podaci pouzdano slali i primali s klijentske strane na poslužiteljsku radi pozadinske obrade.

Za opseg ovog vodiča, mi ćemo usredotočite se na stvaranje obrasca koji svoje podatke šalje kao application / x-www-form-urlencoded vrsta sadržaja u web aplikaciji Spring.

2. Kodiranje podataka obrasca

Najčešće korištena HTTP metoda za slanje obrazaca je POST. Međutim, za idempotentne prijave, također možemo koristiti HTTP GET metodu. A način navođenja metode je putem atributa metode obrasca.

Za obrasce koji koriste GET metodu, cjelokupni podaci obrasca šalju se kao dio niza upita. Ali, ako koristimo POST metodu, tada se njezini podaci šalju kao dio tijela HTTP zahtjeva.

Štoviše, u potonjem slučaju također možemo navedite kodiranje podataka obrascima enctype atribut, koji mogu imati dvije vrijednosti, naime application / x-www-form-urlencoded i višedijelni / obrasci-podaci.

2.1. Vrsta medija application / x-www-form-urlencoded

HTML obrasci imaju zadanu vrijednost application / x-www-form-urlencoded za enctype atribut jer se ovo brine o osnovnim slučajevima korištenja gdje su podaci u cijelosti tekst. Ipak, ako naš slučaj upotrebe uključuje podržavanje podataka iz datoteke, tada ćemo ga morati nadjačati s vrijednosti višedijelni / obrasci-podaci.

U osnovi, šalje podatke obrasca kao parove ključ / vrijednost odvojene znakom ampersand (&). Također, odgovarajući ključ i vrijednost odvojeni su znakom jednakosti (=). Nadalje, svi rezervirani i ne-alfanumerički znakovi kodiraju se pomoću postotnog kodiranja.

3. Predaja obrasca u pregledniku

Sad kad imamo pokrivene osnove, hajde da vidimo kako možemo obrađuju podatke kodirane u obliku URL-a za jednostavan slučaj slanja povratnih informacija u web aplikaciji Spring.

3.1. Model domene

Za obrazac za povratne informacije moramo zajedno s komentarom uhvatiti identifikator e-pošte podnositelja prijave. Pa, kreirajmo svoje model domene u a Povratne informacije razred:

povratne informacije javnog razreda {private String emailId; komentar privatnog niza; }

3.2. Izradite obrazac

Da bismo koristili jednostavan HTML predložak za izradu našeg dinamičnog web obrasca, morat ćemo konfigurirati Thymeleaf u našem projektu. Nakon ovoga spremni smo dodati a GET krajnja točka /Povratne informacije koji će služiti Povratne informacije pogled za obrazac:

@GetMapping (path = "/ feedback") javni niz getFeedbackForm (model modela) {Feedback feedback = new Feedback (); model.addAttribute ("povratne informacije", povratne informacije); vratiti "povratnu informaciju"; }

Imajte na umu da koristimo Povratne informacije kao atribut modela za hvatanje korisničkog unosa. Dalje, idemo stvoritiPovratne informacije pogled u povratne informacije.html predložak:

Naravno, ne trebamo izričito navesti enctype atribut jer će odabrati zadanu vrijednost application / x-www-form-urlencoded.

3.3. PRG protok

Kako prihvaćamo unos korisnika putem obrasca za povratne informacije preglednika, moramo implementirajte tijek posla predavanja POST / REDIRECT / GET (PRG) kako biste izbjegli dvostruke prijave.

Prvo, implementirajmo POST krajnju točku / web / povratne informacije koji će djelovati kao voditelj radnje za obrazac za povratne informacije:

@PostMapping (path = "/ web / feedback", konzumira = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public String handleBrowserSubmissions (Feedback feedback) baca izuzetak {// Spremanje podataka povratnih informacija return "redirect: / feedback / success"; }

Dalje, možemo implementirati krajnju točku preusmjeravanja / povratne informacije / uspjeh koji služi GET zahtjevu:

@GetMapping ("/ feedback / success") javni ResponseEntity getSuccess () {return new ResponseEntity ("Zahvaljujemo na slanju povratnih informacija.", HttpStatus.OK); }

Posjetimo da bismo provjerili funkcionalnost tijeka predavanja obrazaca u pregledniku localhost: 8080 / povratna informacija:

Konačno, možemo provjeriti i da li se podaci obrasca šalju u URL kodiranom obrascu:

emailId = abc% 40example.com & comment = Uzorak + Povratne informacije

4. Zahtjevi koji nisu preglednički

Ponekad možda nemamo HTTP klijenta utemeljenog na pregledniku. Umjesto toga, naš bi klijent mogao biti uslužni program poput cURL-a ili poštara. U takvom slučaju ne trebamo HTML web obrazac. Umjesto toga, možemo implementirati a /Povratne informacije krajnja točka koja služi POST zahtjevu:

@PostMapping (path = "/ feedback", konzumira = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public ResponseEntity handleNonBrowserSubmissions (@RequestBody Feedback feedback) baca izuzetak {// Spremanje podataka povratnih informacija vraća novi ResponseEntity ("Hvala na slanju povratnih informacija", HttpS ); }

U nedostatku HTML obrasca u našem protoku podataka, ne moramo nužno implementirati obrazac PRG. Međutim, moramo navesti da resurs prihvaća APPLICATION_FORM_URLENCODED_VALUE vrsta medija.

Napokon, možemo ga testirati sa zahtjevom za curL:

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

4.1. ObrazacHttpMessageConverter Osnove

HTTP zahtjev koji šalje application / x-www-form-urlencoded podaci to moraju navesti u Vrsta sadržaja Zaglavlje. Interno Spring koristi ObrazacHttpMessageConverter razreda za čitanje ovih podataka i njihovo povezivanje s parametrom metode.

U slučajevima kada je parametar naše metode tipa MultiValueMap, možemo koristiti bilo koji @RequestParam ili @RequestBody napomena kako bi se na odgovarajući način povezao s tijelom HTTP zahtjeva. To je zato što API Servlet kombinira parametre upita i podatke obrasca u jedinstvenu zvanu kartu parametri, a to uključuje automatsko raščlanjivanje tijela zahtjeva:

@PostMapping (path = "/ feedback", konzumira = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public ResponseEntity handleNonBrowserSubmissions (@RequestParam MultiValueMap paramMap) baca izuzetak {// Spremanje podataka povratnih informacija vraća novi ResponseEntting ("Hvala, Http ); }

Međutim, za parametar metode drugog tipa osim MultiValueMap, kao što je naša Povratne informacije objekt domene, moramo koristiti samo @RequestBody bilješka.

5. Zaključak

U ovom smo uputstvu ukratko saznali o kodiranju podataka obrazaca u web obrascima. Također smo istražili kako postupati s podacima kodiranim URL-om za HTTP zahtjeve preglednika i ne-preglednika implementirajući obrazac za povratne informacije u web aplikaciju Spring Boot.

Kao i uvijek, cjeloviti izvorni kôd vodiča dostupan je na GitHub-u.

OSTALO dno

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

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