Ú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.