Guide til UriComponentsBuilder om foråret

1. Introduktion

I denne vejledning vil vi fokusere på foråret UriComponentsBuilder. Mere specifikt beskriver vi forskellige praktiske implementeringseksempler.

Byggeren arbejder sammen med UriComponents klasse - en uforanderlig beholder til URI-komponenter.

Et nyt UriComponentsBuilder klasse hjælper med at skabe UriComponents forekomster ved at give finkornet kontrol over alle aspekter af forberedelse af en URI inklusive konstruktion, udvidelse fra skabelonvariabler og kodning.

2. Maven-afhængigheder

For at bruge bygherren skal vi medtage følgende afsnit i afhængigheder af vores pom.xml:

 org.springframework spring-web 5.2.2.RELEASE 

Den seneste version kan findes her.

Denne afhængighed dækker kun Spring Web, så glem ikke at tilføje forårskontekst for en komplet webapplikation.

Vi skal selvfølgelig også oprette logning til projektet - mere om det her.

3. Brug sager

Der er mange praktiske brugssager til UriComponentsBuilder, startende fra en kontekstuel kodning af tegn, der ikke er tilladt i den tilsvarende URI-komponent, og slutter med at udskifte dele af URL'en dynamisk.

En af de største fordele ved UriComponentsBuilder er det vi kan injicere det lige ind i en controller-metode:

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

Lad os begynde at beskrive nyttige eksempler en efter en. Vi bruger JUnit-rammen til at teste vores implementeringer med det samme.

3.1. Konstruktion af en URI

Lad os starte med den enkleste. Vi vil bruge UriComponentsBuilder bare for at oprette et simpelt link:

@Test offentlig ugyldig constructUri () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Vært ("www.baeldung.com"). Sti ("/ junit-5"). Build (); assertEquals ("/ junit-5", uriComponents.toUriString ()); }

Som vi måske ser, skabte vi en ny forekomst af UriComponentsBuilder, så leverede vi ordningstype, vært og en sti til anmodningsdestinationen.

Dette enkle eksempel kan være nyttigt, når vi vil udføre en omdirigering til anden del / link på vores hjemmeside.

3.2. Konstruktion af en kodet URI

Ud over at oprette et simpelt link vil vi måske kode det endelige resultat. Lad os se dette i praksis:

@Test offentlig ugyldig constructUriEncoded () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Vært ("www.baeldung.com"). Sti ("/ junit 5"). Build (). Kode ( ); assertEquals ("/ junit% 205", uriComponents.toUriString ()); }

Forskellen i dette eksempel er, at vi vil tilføje mellemrum mellem ordet junit og nummer 5. I overensstemmelse med RFC 3986 ville det ikke være muligt. Vi er nødt til at kode linket for at opnå det gyldige resultat ved hjælp af kode () metode.

3.3. Konstruktion af en URI fra en skabelon

URI-skabeloner er tilladt i de fleste komponenter i en URI, men deres værdi er begrænset til et bestemt element, som vi angiver som en skabelon. Lad os se eksemplet for at afklare:

@Test offentlig ugyldig konstruktionUriFromTemplate () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Vært ("www.baeldung.com"). Sti ("/ {artikelnavn}") .buildAndExpand (" junit-5 "); assertEquals ("/ junit-5", uriComponents.toUriString ()); }

Forskellen i dette eksempel er i den måde, vi erklærer stien på, og hvordan vi bygger den endelige URI. Skabelon, der erstattes af nøgleord, er angivet med parenteser - {…}, inde i sti() metode. Nøgleordet, der bruges til at generere det endelige link, bruges i den navngivne metode buildAndExpand (…).

Bemærk, at der muligvis kan være mere end et nøgleord, der skal udskiftes. Stien til URI kan også være relativ.

Dette eksempel vil være meget nyttigt, når vi gerne vil sende modelobjekter til Spring Controller, som vi bygger en URI på.

3.4. Konstruktion af en URI med forespørgselsparametre

En anden meget nyttig sag er at oprette URI med forespørgselsparametre.

Vi er nødt til at bruge forespørgsel() fra UriComponentsBuilder for at specificere URI-forespørgselsparametre. Lad os se følgende eksempel:

@Test offentlig ugyldig konstruktionUriWithQueryParameter () {UriComponents uriComponents = UriComponentsBuilder.newInstance () .scheme ("http"). Host ("www.google.com") .path ("/"). Forespørgsel ("q = {nøgleord} ") .buildAndExpand (" baeldung "); assertEquals ("// www.google.com/?q=baeldung", uriComponents.toUriString ()); }

Forespørgslen føjes til hoveddelen af ​​linket. Vi kan levere flere forespørgselsparametre ved hjælp af parenteser {…}. De erstattes af nøgleord i den navngivne metode buildAndExpand (…).

Denne implementering af UriComponentsBuilder kan bruges til at oprette - for eksempel - et forespørgselssprog til en REST API.

3.5. Udvidelse af en URI med regulære udtryk

Det sidste eksempel viser en konstruktion af en URI med regex-validering. Vi kan udvide uriKomponenter kun hvis regex-validering vil lykkes:

@Test offentligt ugyldigt expandWithRegexVar () {String template = "/ myurl / {name: [a-z] {1,5}} / show"; UriComponents uriComponents = UriComponentsBuilder.fromUriString (skabelon) .build (); uriComponents = uriComponents.expand (Collections.singletonMap ("navn", "test")); assertEquals ("/ myurl / test / show", uriComponents.getPath ()); }

I det ovennævnte eksempel kan vi se, at den midterste del af linket kun skal have bogstaver fra a-z og længden i et interval mellem 1-5.

Vi bruger også singletonMap, for at erstatte søgeord navn med værdi prøve.

Dette eksempel er især nyttigt, når vi gør det muligt for en bruger at specificere links dynamisk, men vi ønsker at give en slags sikkerhed, hvor kun gyldige links fungerer i vores webapplikation.

4. Konklusion

Denne vejledning præsenterer nyttige eksempler på UriComponentsBuilder.

De vigtigste fordele ved UriComponentsBuilder er fleksibiliteten ved at bruge URI-skabelonvariabler og en mulighed for at injicere den direkte i Spring Controller-metoder.

Alle eksempler og konfigurationer er tilgængelige her på GitHub.