Leitfaden für UriComponentsBuilder im Frühjahr

1. Einleitung

In diesem Tutorial konzentrieren wir uns auf den Spring UriComponentsBuilder. Insbesondere werden verschiedene praktische Implementierungsbeispiele beschrieben.

Der Builder arbeitet mit der UriComponents- Klasse zusammen - einem unveränderlichen Container für URI-Komponenten.

Eine neue UriComponentsBuilder- Klasse hilft beim Erstellen von UriComponents- Instanzen, indem sie eine detaillierte Steuerung aller Aspekte der Vorbereitung eines URI bietet, einschließlich der Erstellung, Erweiterung von Vorlagenvariablen und Codierung.

2. Maven-Abhängigkeiten

Um den Builder verwenden zu können, müssen wir den folgenden Abschnitt in die Abhängigkeiten unserer pom.xml aufnehmen :

 org.springframework spring-web 5.2.2.RELEASE  

Die neueste Version finden Sie hier.

Diese Abhängigkeit gilt nur für Spring Web. Vergessen Sie also nicht, den Spring-Kontext für eine vollständige Webanwendung hinzuzufügen .

Natürlich müssen wir auch die Protokollierung für das Projekt einrichten - mehr dazu hier.

3. Anwendungsfälle

Es gibt viele praktische Anwendungsfälle für den UriComponentsBuilder , beginnend mit einer kontextbezogenen Codierung von Zeichen, die in der entsprechenden URI-Komponente nicht zulässig sind, bis hin zum dynamischen Ersetzen von Teilen der URL.

Einer der größten Vorteile von UriComponentsBuilder ist, dass wir es direkt in eine Controller-Methode einfügen können :

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

Lassen Sie uns nacheinander nützliche Beispiele beschreiben. Wir werden das JUnit-Framework verwenden, um unsere Implementierungen sofort zu testen.

3.1. URI erstellen

Beginnen wir mit dem einfachsten. Wir möchten UriComponentsBuilder verwenden , um einen einfachen Link zu erstellen:

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

Wie wir vielleicht beobachten, haben wir eine neue Instanz von UriComponentsBuilder erstellt und dann den Schematyp , den Host und einen Pfad zum Anforderungsziel angegeben.

Dieses einfache Beispiel kann nützlich sein, wenn wir eine Weiterleitung zu einem anderen Teil / Link unserer Website durchführen möchten.

3.2. Erstellen eines codierten URI

Zusätzlich zum Erstellen eines einfachen Links möchten wir möglicherweise das Endergebnis codieren. Lassen Sie uns dies in der Praxis sehen:

@Test public void constructUriEncoded() { UriComponents uriComponents = UriComponentsBuilder.newInstance() .scheme("http").host("www.baeldung.com").path("/junit 5").build().encode(); assertEquals("/junit%205", uriComponents.toUriString()); }

Der Unterschied in diesem Beispiel besteht darin, dass wir zwischen dem Wort junit und Nummer 5 ein Leerzeichen einfügen möchten . Entsprechend dem RFC 3986 wäre dies nicht möglich. Wir müssen den Link codieren, um das gültige Ergebnis mithilfe der Methode encode () zu erzielen .

3.3. Erstellen einer URI aus einer Vorlage

URI-Vorlagen sind in den meisten Komponenten einer URI zulässig, ihr Wert ist jedoch auf ein bestimmtes Element beschränkt, das wir als Vorlage angeben. Schauen wir uns das Beispiel an, um Folgendes zu verdeutlichen:

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

Der Unterschied in diesem Beispiel besteht darin, wie wir den Pfad deklarieren und wie wir den endgültigen URI erstellen. Vorlagen, die durch Schlüsselwörter ersetzt werden , werden in der Methode path () in Klammern - {…} angegeben . Das Schlüsselwort, mit dem der endgültige Link generiert wird, wird in der Methode buildAndExpand (…) verwendet .

Bitte beachten Sie, dass möglicherweise mehr als ein Schlüsselwort ersetzt werden muss. Der Pfad zum URI kann auch relativ sein.

Dieses Beispiel ist sehr hilfreich, wenn wir Modellobjekte an den Spring Controller übergeben möchten, auf dessen Grundlage wir einen URI erstellen.

3.4. Erstellen eines URI mit Abfrageparametern

Ein weiterer sehr nützlicher Fall ist das Erstellen eines URI mit Abfrageparametern.

Wir müssen query () von UriComponentsBuilder verwenden , um URI-Abfrageparameter anzugeben. Sehen wir uns das folgende Beispiel an:

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

Die Abfrage wird dem Hauptteil des Links hinzugefügt. Wir können mehrere Abfrageparameter in Klammern {…} angeben. Sie werden in der Methode buildAndExpand (…) durch Schlüsselwörter ersetzt .

Diese Implementierung von UriComponentsBuilder kann verwendet werden, um beispielsweise eine Abfragesprache für eine REST-API zu erstellen.

3.5. Erweitern eines URI mit regulären Ausdrücken

Das letzte Beispiel zeigt eine Konstruktion eines URI mit Regex-Validierung. Wir können die uriComponents nur erweitern, wenn die Regex-Validierung erfolgreich ist:

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

Im oben genannten Beispiel können wir sehen, dass der mittlere Teil des Links nur Buchstaben von az und die Länge in einem Bereich zwischen 1 und 5 enthalten muss .

Auch wir verwenden singletonMap , Stichwort zu ersetzen Namen mit Wert - Test .

Dieses Beispiel ist besonders nützlich, wenn wir einem Benutzer ermöglichen, Links dynamisch anzugeben, aber eine Art Sicherheit bieten möchten, bei der nur gültige Links in unserer Webanwendung funktionieren.

4. Fazit

Dieses Tutorial enthält nützliche Beispiele für den UriComponentsBuilder .

Die Hauptvorteile von UriComponentsBuilder sind die Flexibilität bei der Verwendung von URI-Vorlagenvariablen und die Möglichkeit, diese direkt in Spring Controller-Methoden einzufügen .

Alle Beispiele und Konfigurationen finden Sie hier auf GitHub.