RequestMapping mit Schrägstrichen und Punkt

9

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

    %Vor%

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

    
sidgate 14.03.2016, 14:23
quelle

2 Antworten

2

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:

  1. Legen Sie eine RequestMapping fest, die alle Daten mit Ausnahme der Adressen
  2. extrahiert
  3. Extrahieren Sie die Adressen manuell in der Methode

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%
  1. Zuerst extrahieren wir aus der Anfrage den vollständigen Pfad
  2. Dann entfernen wir, was wir bereits extrahiert haben, was hier der Anfang und das Ende des Pfades sind
  3. Dann verwenden wir schließlich String.split , um alle Adressen
  4. zu extrahieren

Auf dieser Ebene haben Sie alles, was Sie brauchen.

    
Nicolas Filotto 15.04.2016, 16:57
quelle
1

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.

    
vine 11.04.2016 13:27
quelle

Tags und Links