Guide til UriComponentsBuilder om våren

1. Introduksjon

I denne opplæringen skal vi fokusere på våren UriComponentsBuilder. Mer spesifikt vil vi beskrive forskjellige praktiske implementeringseksempler.

Byggherren jobber sammen med UriComponents klasse - en uforanderlig beholder for URI-komponenter.

En ny UriComponentsBuilder klasse er med på å skape UriComponents tilfeller ved å gi finkornet kontroll over alle aspekter ved å forberede en URI, inkludert konstruksjon, utvidelse fra malvariabler og koding.

2. Maven-avhengigheter

For å kunne bruke byggherren, må vi inkludere følgende avsnitt i avhengigheter av vår pom.xml:

 org.springframework spring-web 5.2.2.RELEASE 

Den siste versjonen finner du her.

Denne avhengigheten dekker bare Spring Web, så ikke glem å legge til vår-kontekst for en fullstendig webapplikasjon.

Vi må selvsagt også sette opp logging for prosjektet - mer om det her.

3. Bruk saker

Det er mange praktiske brukssaker for UriComponentsBuilder, starter fra en kontekstuell koding av tegn som ikke er tillatt i den tilsvarende URI-komponenten, og fullfører på å erstatte deler av URL-en dynamisk.

En av de største fordelene med UriComponentsBuilder er det vi kan injisere det rett inn i en kontrollermetode:

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

La oss begynne å beskrive nyttige eksempler en etter en. Vi bruker JUnit-rammeverket for å teste implementeringene våre umiddelbart.

3.1. Konstruere en URI

La oss starte med den enkleste. Vi vil bruke UriComponentsBuilder bare for å lage en enkel lenke:

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

Som vi kanskje ser, opprettet vi en ny forekomst av UriComponentsBuilder, så ga vi ordningstype, vert og en sti til forespørselsdestinasjonen.

Dette enkle eksemplet kan være nyttig når vi ønsker å utføre en omdirigering til en annen del / lenke på nettstedet vårt.

3.2. Konstruere en kodet URI

I tillegg til å lage en enkel lenke, kan det være lurt å kode det endelige resultatet. La oss se dette i praksis:

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

Forskjellen i dette eksemplet er at vi vil legge til mellomrom mellom ordet junit og nummer 5. I følge RFC 3986 ville det ikke være mulig. Vi trenger å kode koblingen for å oppnå gyldig resultat ved hjelp av kode () metode.

3.3. Konstruere en URI fra en mal

URI-maler er tillatt i de fleste komponentene i en URI, men verdien er begrenset til et bestemt element, som vi angir som en mal. La oss se eksemplet for å avklare:

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

Forskjellen i dette eksemplet er i måten vi deklarerer banen og hvordan vi bygger den endelige URI. Mal som skal erstattes av nøkkelord er angitt med parentes - {…}, inne i sti() metode. Nøkkelordet som brukes til å generere den endelige lenken, brukes i den benevnte metoden buildAndExpand (…).

Vær oppmerksom på at det kan være mer enn ett nøkkelord som skal erstattes. Også stien til URI kan være relativ.

Dette eksemplet vil være veldig nyttig når vi ønsker å sende modellobjekter til vårkontrolleren basert på hvilke vi bygger en URI.

3.4. Konstruere en URI med spørringsparametere

Et annet veldig nyttig tilfelle er å lage URI med søkeparametere.

Vi må bruke spørsmål() fra UriComponentsBuilder for å spesifisere URI-søkeparametere. La oss se følgende eksempel:

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

Søket blir lagt til i hoveddelen av lenken. Vi kan tilby flere spørsmålsparametere ved hjelp av parentes {…}. De blir erstattet av nøkkelord i metoden som heter buildAndExpand (…).

Denne implementeringen av UriComponentsBuilder kan brukes til å bygge - for eksempel - et spørrespråk for et REST API.

3.5. Utvide en URI med regulære uttrykk

Det siste eksemplet viser en konstruksjon av en URI med regex-validering. Vi kan utvide uriKomponenter bare hvis regex-validering vil lykkes:

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

I det ovennevnte eksemplet kan vi se at den midterste delen av lenken bare trenger bokstaver fra a-z og lengden i et område mellom 1-5.

Vi bruker også singletonMap, for å erstatte nøkkelord Navn med verdi test.

Dette eksemplet er spesielt nyttig når vi gjør det mulig for en bruker å spesifisere lenker dynamisk, men vi vil gi en slags sikkerhet der bare gyldige lenker fungerer i webapplikasjonen vår.

4. Konklusjon

Denne opplæringen presenterer nyttige eksempler på UriComponentsBuilder.

De viktigste fordelene med UriComponentsBuilder er fleksibiliteten ved å bruke URI malvariabler, og muligheten for å injisere den direkte i Spring Controller-metoder.

Alle eksempler og konfigurasjoner er tilgjengelige her på GitHub.


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