Útmutató az UriComponentsBuilder tavasszal

1. Bemutatkozás

Ebben az oktatóanyagban a tavaszra fogunk összpontosítani UriComponentsBuilder. Pontosabban, különféle gyakorlati megvalósítási példákat írunk le.

Az építtető a UriComponents osztály - megváltoztathatatlan tartály az URI-alkatrészek számára.

Egy új UriComponentsBuilder osztály segít létrehozni UriComponents példányokat az URI elkészítésének minden aspektusát részletesen szabályozva, beleértve a felépítést, a sablonváltozókból történő kibővítést és a kódolást.

2. Maven-függőségek

Az építő használatához be kell illesztenünk a következő szakaszt a függőségek a mi pom.xml:

 org.springframework spring-web 5.2.2.FELHASZNÁLÁS 

A legújabb verzió itt található.

Ez a függőség csak a tavaszi webet fedi le, ezért ne felejtse el hozzáfűzni tavaszi kontextus egy teljes webes alkalmazáshoz.

Természetesen be kell állítanunk a naplózást is a projekthez - erről bővebben itt.

3. Használjon tokokat

Számos gyakorlati felhasználási eset létezik a UriComponentsBuilder, a megfelelő URI-komponensben nem engedélyezett karakterek kontextuális kódolásától kezdve az URL-részek dinamikus cseréjével.

Az egyik legnagyobb előnye a UriComponentsBuilder az, hogy a injektálhatjuk közvetlenül egy kontroller módszerbe:

@RequestMapping (method = RequestMethod.POST) public ResponseEntity createCustomer (UriComponentsBuilder builder) {// implementáció}

Kezdjük egyesével leírni a hasznos példákat. A JUnit keretrendszer segítségével azonnal tesztelhetjük megvalósításunkat.

3.1. URI szerkesztése

Kezdjük a legegyszerűbbel. Szeretnénk használni UriComponentsBuilder csak egy egyszerű link létrehozásához:

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

Amint megfigyelhetjük, létrehoztunk egy új példányt UriComponentsBuilder, akkor megadtuk a séma típusát, gazdagépét és elérési útját a kérelem céljához.

Ez az egyszerű példa hasznos lehet, ha átirányítást akarunk végrehajtani a weboldalunk másik részére / linkjére.

3.2. Kódolt URI létrehozása

Az egyszerű link létrehozása mellett érdemes kódolni a végeredményt. Lássuk ezt a gyakorlatban:

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

A különbség ebben a példában az, hogy helyet akarunk adni a szó között junit és számát 5. Az RFC 3986 szerint ez nem lehetséges. Az érvényes eredmény elérése érdekében kódolnunk kell a linket kódol() módszer.

3.3. URI szerkesztése sablonból

Az URI sablonok az URI legtöbb összetevőjében megengedettek, de értékük egy adott elemre korlátozódik, amelyet sablonként jelölünk meg. Nézzük meg a tisztázandó példát:

@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 ()); }

A különbség ebben a példában abban áll, hogy miként deklaráljuk az utat és hogyan építjük fel a végső URI-t. A kulcsszavakkal felváltott sablon zárójelben van feltüntetve - {…}, benne pálya() módszer. Az a kulcsszó, amelyet a végső link létrehozására használnak, a megnevezett módszerben használatos buildAndExpand (…).

Felhívjuk figyelmét, hogy több kulcsszó is cserélhető. Az URI-hoz vezető út viszonylagos is lehet.

Ez a példa nagyon hasznos lesz, amikor modellobjektumokat szeretnénk átadni a Spring Controller-nek, amely alapján felépítünk egy URI-t.

3.4. URI létrehozása lekérdezési paraméterekkel

Egy másik nagyon hasznos eset az URI létrehozása lekérdezési paraméterekkel.

Használnunk kell lekérdezés() tól től UriComponentsBuilder URI lekérdezési paraméterek megadásához. Lássuk a következő példát:

@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 ()); }

A lekérdezés hozzáadódik a hivatkozás fő részéhez. Zárójelben több lekérdezési paramétert is megadhatunk {…}. Ezeket kulcsszavak váltják fel a megnevezett módszerben buildAndExpand (…).

A UriComponentsBuilder felhasználható egy REST API lekérdezési nyelvének felépítésére.

3.5. URI bővítése reguláris kifejezésekkel

Az utolsó példa egy URI felépítését mutatja be regex érvényesítéssel. Bővíteni tudjuk a uriKomponensek csak akkor, ha a regex érvényesítés sikeres lesz:

@Test public void expandWithRegexVar () {String template = "/ myurl / {név: [a-z] {1,5}} / show"; UriComponents uriComponents = UriComponentsBuilder.fromUriString (template) .build (); uriComponents = uriComponents.expand (Gyűjtemények.singletonMap ("név", "teszt")); assertEquals ("/ myurl / test / show", uriComponents.getPath ()); }

A fent említett példában láthatjuk, hogy a link középső részének csak betűi kellenek a-z és a hossza közötti tartományban 1-5.

Továbbá használjuk singletonTérkép, a kulcsszó helyettesítésére név értékkel teszt.

Ez a példa különösen akkor hasznos, ha lehetővé tesszük a felhasználó számára a linkek dinamikus megadását, de egyfajta biztonságot szeretnénk nyújtani, ahol csak érvényes linkek működnek webalkalmazásunkban.

4. Következtetés

Ez az oktatóanyag hasznos példákat mutat be a UriComponentsBuilder.

A fő előnyei UriComponentsBuilder az URI sablonváltozók használatának rugalmassága, valamint annak a lehetősége, hogy azt közvetlenül a Spring Controller módszerekbe injektálják.

Minden példa és konfiguráció itt érhető el a GitHub-on.