Ich muss folgendes URL-Format unterstützen
/service/country/city/addr1/addr2/xyz.atom
/service/country/city/addr1/addr2/addr3/xyz.atom
wobei country
und city
auf @PathVariable
abgebildet werden können. Danach kann der Pfad dynamisch mit mehreren Schrägstrichen sein. Der Endteil hat .atom
oder ähnlich.
Ich habe versucht, zu folgen, aber keine der Optionen scheint zu funktionieren
Platzhalter
@RequestMapping(value="/service/{country}/{city}/**")
Regex
@RequestMapping(value="/service/{country}/{city}/{addr:.+}")
UseSuffixPatternMatch
Override-Methode in der Config-Klasse
Sieht so aus, als ob die Kombination von Schrägstrich und Punkten nicht mit den obigen Lösungen funktioniert.
Ich bekomme 406
für nicht übereinstimmenden Accept-Header oder 404
Am dynamischsten wäre es, MatrixVariable
zu verwenden, um die Liste der Adressen zu verwalten, aber dies ist in Ihrem Kontext nicht anwendbar, da die Pfade nicht so weit geändert werden können, wie ich es von Ihrer Frage verstehe.
Das Beste, was Sie tun können, um Ihren dynamischen Pfad zu verwalten, besteht darin, in zwei Schritten vorzugehen:
RequestMapping
fest, die alle Daten mit Ausnahme der Adressen Für den ersten Schritt werden Sie so etwas haben:
%Vor%Diese Zuordnung stimmt mit allen erforderlichen Pfaden überein und erlaubt, das Land, die Stadt und den Dateinamen zu extrahieren.
Im zweiten Schritt verwenden wir das, was extrahiert wurde, um die Adressen zu erhalten, indem wir so etwas tun:
%Vor%String.split
, um alle Adressen Auf dieser Ebene haben Sie alles, was Sie brauchen.
Können Sie das versuchen,
? %Vor%Sie müssen nur das vollständige regex-Format angeben, in dem Sie eine Erweiterung am Ende der URL erwarten, wie z. B. atom, da dies standardmäßig von Spring als MediaType interpretiert wird.
Eine andere Lösung ist die Angabe der akzeptierten MediaTypes
%Vor%Sie können benutzerdefinierte MediaTypes erstellen, wenn sie nicht im Frühling vordefiniert sind.
Tags und Links java regex spring spring-mvc