Gids voor UriComponentsBuilder in het voorjaar

1. Inleiding

In deze tutorial gaan we ons concentreren op de lente UriComponentsBuilder. Meer specifiek zullen we verschillende praktische implementatievoorbeelden beschrijven.

De bouwer werkt samen met de UriComponents class - een onveranderlijke container voor URI-componenten.

Een nieuw UriComponentsBuilder klasse helpt bij het creëren UriComponents instanties door fijnmazige controle te bieden over alle aspecten van het voorbereiden van een URI, inclusief constructie, uitbreiding van sjabloonvariabelen en codering.

2. Maven afhankelijkheden

Om de builder te kunnen gebruiken, moeten we de volgende sectie opnemen in het afhankelijkheden van onze pom.xml:

 org.springframework spring-web 5.2.2.RELEASE 

De laatste versie vind je hier.

Deze afhankelijkheid dekt alleen Spring Web, dus vergeet niet toe te voegen lente-context voor een volledige webapplicatie.

We moeten natuurlijk ook logboekregistratie instellen voor het project - daarover hier meer.

3. Gebruik gevallen

Er zijn veel praktische gebruiksscenario's voor de UriComponentsBuilder, beginnend met een contextuele codering van tekens die niet zijn toegestaan ​​in de overeenkomstige URI-component, en eindigend met het dynamisch vervangen van delen van de URL.

Een van de grootste voordelen van UriComponentsBuilder is dat we kunnen het rechtstreeks in een controllermethode injecteren:

@RequestMapping (method = RequestMethod.POST) openbare ResponseEntity createCustomer (UriComponentsBuilder-builder) {// implementatie}

Laten we beginnen met het een voor een beschrijven van nuttige voorbeelden. We zullen het JUnit-framework gebruiken om onze implementaties onmiddellijk te testen.

3.1. Een URI construeren

Laten we beginnen met de eenvoudigste. We willen gebruiken UriComponentsBuilder gewoon om een ​​eenvoudige link te maken:

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

Zoals we kunnen zien, hebben we een nieuw exemplaar van UriComponentsBuilder, vervolgens hebben we het schematype, de host en een pad naar de aanvraagbestemming verstrekt.

Dit eenvoudige voorbeeld kan handig zijn als we een doorverwijzing naar een ander deel / een andere link van onze website willen uitvoeren.

3.2. Een gecodeerde URI construeren

Naast het maken van een eenvoudige link, willen we misschien het eindresultaat coderen. Laten we dit in de praktijk bekijken:

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

Het verschil in dit voorbeeld is dat we ruimte tussen het woord willen toevoegen junit en nummer 5. Volgens de RFC 3986 zou het niet mogelijk zijn. We moeten de link coderen om het geldige resultaat te bereiken, met behulp van coderen() methode.

3.3. Een URI samenstellen op basis van een sjabloon

URI-sjablonen zijn toegestaan ​​in de meeste componenten van een URI, maar hun waarde is beperkt tot een bepaald element, dat we aangeven als een sjabloon. Laten we het voorbeeld bekijken om het te verduidelijken:

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

Het verschil in dit voorbeeld zit hem in de manier waarop we het pad declareren en hoe we de uiteindelijke URI bouwen. Sjabloon die wordt vervangen door trefwoorden wordt aangegeven door haakjes - {…}, binnen in de pad() methode. Het sleutelwoord dat wordt gebruikt om de laatste link te genereren, wordt gebruikt in de genoemde methode buildAndExpand (…).

Houd er rekening mee dat er mogelijk meer dan één trefwoord moet worden vervangen. Het pad naar de URI kan ook relatief zijn.

Dit voorbeeld is erg handig als we modelobjecten willen doorgeven aan de Spring Controller op basis waarvan we een URI gaan bouwen.

3.4. Een URI samenstellen met queryparameters

Een ander erg handig geval is om URI te maken met queryparameters.

We moeten gebruiken vraag () van UriComponentsBuilder om URI-queryparameters op te geven. Laten we het volgende voorbeeld bekijken:

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

De zoekopdracht wordt toegevoegd aan het hoofdgedeelte van de link. We kunnen meerdere queryparameters opgeven met haakjes {…}. Ze worden vervangen door trefwoorden in de genoemde methode buildAndExpand (…).

Deze implementatie van UriComponentsBuilder kan worden gebruikt om - bijvoorbeeld - een querytaal voor een REST API te bouwen.

3.5. Een URI uitbreiden met reguliere expressies

Het laatste voorbeeld toont een constructie van een URI met regex-validatie. We kunnen het uriComponents alleen als regex-validatie succesvol is:

@Test public void expandWithRegexVar () {String-sjabloon = "/ myurl / {naam: [a-z] {1,5}} / show"; UriComponents uriComponents = UriComponentsBuilder.fromUriString (sjabloon) .build (); uriComponents = uriComponents.expand (Collections.singletonMap ("naam", "test")); assertEquals ("/ myurl / test / show", uriComponents.getPath ()); }

In het bovenstaande voorbeeld kunnen we zien dat het middelste deel van de link alleen letters van hoeft te hebben a-z en de lengte in een bereik tussen 1-5.

We gebruiken ook singletonMap, om trefwoord te vervangen naam met waarde test.

Dit voorbeeld is vooral handig als we een gebruiker in staat stellen om dynamisch links te specificeren, maar we willen een soort beveiliging bieden waarbij alleen geldige links werken in onze webapplicatie.

4. Conclusie

Deze tutorial bevat handige voorbeelden van de UriComponentsBuilder.

De belangrijkste voordelen van UriComponentsBuilder zijn de flexibiliteit van het gebruik van URI-sjabloonvariabelen en de mogelijkheid om deze rechtstreeks in Spring Controller-methoden te injecteren.

Alle voorbeelden en configuraties zijn hier beschikbaar op GitHub.