Vodič za UriComponentsBuilder u proljeće

1. Uvod

U ovom uputstvu usredotočit ćemo se na Proljeće UriComponentsBuilder. Točnije, opisat ćemo razne primjere praktične provedbe.

Graditelj radi zajedno s UriComponents klasa - nepromjenjivi spremnik za URI komponente.

Nova UriComponentsBuilder razred pomaže u stvaranju UriComponents primjera pružajući preciznu kontrolu nad svim aspektima pripreme URI-a, uključujući konstrukciju, proširenje iz varijabli predloška i kodiranje.

2. Ovisnosti Mavena

Da bismo koristili graditelj, moramo uključiti sljedeći odjeljak u ovisnosti Od našeg pom.xml:

 org.springframework spring-web 5.2.2.OSLOBOĐENJE 

Najnoviju verziju možete pronaći ovdje.

Ova ovisnost pokriva samo Spring Web, pa ne zaboravite dodati proljeće-kontekst za cjelovitu web aplikaciju.

Naravno, također moramo postaviti prijavu za projekt - više o tome ovdje.

3. Koristite slučajeve

Postoji mnogo praktičnih slučajeva upotrebe UriComponentsBuilder, počevši od kontekstualnog kodiranja znakova koji nije dopušten u odgovarajućoj URI komponenti, završavajući dinamičkom zamjenom dijelova URL-a.

Jedna od najvećih prednosti UriComponentsBuilder je li to možemo ga ubrizgati izravno u metodu kontrolera:

@RequestMapping (method = RequestMethod.POST) javni ResponseEntity createCustomer (UriComponentsBuilder builder) {// implementacija}

Počnimo s opisivanjem korisnih primjera jedan po jedan. Upotrijebit ćemo okvir JUnit za testiranje naših implementacija odmah.

3.1. Izrada URI-ja

Krenimo od najjednostavnijeg. Želimo koristiti UriComponentsBuilder samo za stvaranje jednostavne veze:

@Test public void constructUri () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Host ("www.baeldung.com"). Path ("/ junit-5"). Build (); assertEquals ("/ junit-5", uriComponents.toUriString ()); }

Kao što možemo primijetiti, stvorili smo novu instancu UriComponentsBuilder, tada smo naveli tip sheme, hosta i put do odredišta zahtjeva.

Ovaj jednostavan primjer mogao bi biti koristan kada želimo izvršiti preusmjeravanje na drugi dio / vezu naše web stranice.

3.2. Izrada kodiranog URI-ja

Osim stvaranja jednostavne veze, možda ćemo htjeti kodirati i konačni rezultat. Pogledajmo ovo u praksi:

@Test public void constructUriEncoded () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Host ("www.baeldung.com"). Path ("/ junit 5"). Build (). Encode ( ); assertEquals ("/ junit% 205", uriComponents.toUriString ()); }

Razlika u ovom primjeru je u tome što želimo dodati razmak između riječi junit i broj 5. Sukladno RFC 3986, to ne bi bilo moguće. Moramo kodirati vezu da bismo postigli valjani rezultat, koristeći kodiraj () metoda.

3.3. Konstruiranje URI-a iz predloška

URI predlošci dopušteni su u većini komponenti URI-a, ali njihova je vrijednost ograničena na određeni element koji označavamo kao predložak. Pogledajmo primjer da pojasnimo:

@Test public void constructUriFromTemplate () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Host ("www.baeldung.com"). Path ("/ {article-name}") .buildAndExpand (" junit-5 "); assertEquals ("/ junit-5", uriComponents.toUriString ()); }

Razlika u ovom primjeru je u načinu na koji deklariramo putanju i načinu na koji gradimo konačni URI. Predložak koji će biti zamijenjen ključnim riječima označen je zagradama - {…}, unutar staza() metoda. Ključna riječ koja se koristi za generiranje konačne veze koristi se u imenovanoj metodi buildAndExpand (...).

Imajte na umu da može biti zamijenjeno više ključnih riječi. Također, put do URI-a može biti relativan.

Ovaj će nam primjer biti od velike pomoći kada želimo proslijediti objektne jedinice Spring Controlleru na temelju kojih ćemo izgraditi URI.

3.4. Konstruiranje URI-a s parametrima upita

Još jedan vrlo koristan slučaj je stvaranje URI-a s parametrima upita.

Moramo koristiti upit () iz UriComponentsBuilder za specificiranje URI parametara upita. Pogledajmo sljedeći primjer:

@Test public void constructUriWithQueryParameter () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Host ("www.google.com") .path ("/"). Query ("q = {keyword}) ") .buildAndExpand (" baeldung "); assertEquals ("// www.google.com/?q=baeldung", uriComponents.toUriString ()); }

Upit će se dodati glavnom dijelu veze. Pomoću zagrada možemo pružiti više parametara upita {…}. Zamijenit će ih ključne riječi u imenovanoj metodi buildAndExpand (...).

Ova provedba UriComponentsBuilder može se koristiti za izgradnju - na primjer - jezika upita za REST API.

3.5. Proširivanje URI-a redovnim izrazima

Posljednji primjer prikazuje konstrukciju URI-a s provjerom regularnog izraza. Moći ćemo proširiti uriComponents samo ako će provjera regularnog izraza biti uspješna:

@Test javna praznina expandWithRegexVar () {String template = "/ myurl / {name: [a-z] {1,5}} / show"; UriComponents uriComponents = UriComponentsBuilder.fromUriString (predložak) .build (); uriComponents = uriComponents.expand (Collections.singletonMap ("ime", "test")); assertEquals ("/ myurl / test / show", uriComponents.getPath ()); }

U gore spomenutom primjeru možemo vidjeti da srednji dio veze mora imati samo slova od a-z a duljina u rasponu između 1-5.

Također, koristimo singletonMap, za zamjenu ključne riječi Ime s vrijednošću test.

Ovaj je primjer posebno koristan kada korisniku omogućimo dinamičko određivanje veza, ali želimo pružiti neku vrstu sigurnosti gdje u našoj web aplikaciji rade samo važeće veze.

4. Zaključak

Ovaj vodič predstavlja korisne primjere UriComponentsBuilder.

Glavne prednosti UriComponentsBuilder su fleksibilnost upotrebe varijabli predloška URI-ja i mogućnost ubrizgavanja izravno u metode Spring Controller-a.

Svi primjeri i konfiguracije dostupni su ovdje na GitHubu.


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