Wie ändert sich das Verhalten von Spring MVC bei der Verarbeitung von URL-Zeichen?

8

Ich versuche ein Webprojekt von Jersey nach Spring MVC 3.0 zu migrieren. Der Prozess war bis zu dem Moment, in dem ich anfing, die Controller zu migrieren, die URLs mit Punktnotationen handhaben sollten, sehr einfach: "/ myApp / resources / create / root.subFolder1 ". Spring MVC scheint den ".subFolder1" -Teil schamlos aus der URL zu entfernen, was tief im Framework-Code passiert (siehe AbstractUrlHandlerMapping -Klasse)

%Vor%

Also wird meine Controller-Methode mit root path -Parameter aufgerufen, nicht root2Folder1

Ich würde wirklich gerne einen Weg finden, dieses Verhalten anzupassen. Irgendwelche Ratschläge?

PS. Die Anforderung besteht darin, die vorhandene URL-Struktur beizubehalten, d. H. Problemumgehungen wie das Wechseln zu Abfrageparametern "/ myApp / resources / create / ? Path = root-folder1 " kann ich nicht berücksichtigen.

PS. Meine Spring-Konfiguration sieht aus wie

%Vor%     
Alex Sonar 09.11.2010, 15:25
quelle

6 Antworten

8

Versuchen Sie Folgendes:

%Vor%

Dies sollte dazu führen, dass Spring nicht versucht, Erweiterungen zu analysieren.

Siehe auch: Spring MVC @PathVariable wird abgeschnitten

Und: Spring Dokumentation

Mögliche Konfigurationsdateien:

web.xml (wo ich das Servlet-Zeug eingestellt habe)

%Vor%

Und dann in WEB / INF / spring / mvc-config.xml habe ich so etwas:

%Vor%     
AHungerArtist 09.11.2010 15:31
quelle
8

Eine weitere Möglichkeit, die in manchen Fällen einfacher sein kann, ist das Hinzufügen eines abschließenden / am Ende der URL.

Ihre URL wäre also /myApp/resources/create/root.subFolder1/

Dies funktioniert in meiner App mit Spring MVC 3.1.

    
Josh 06.12.2012 20:52
quelle
2

Damit

%Vor%

um zu arbeiten müssen Sie das

entfernen / kommentieren %Vor%

und alle anderen mvc: Konfigurationen, die beim Überschreiben der benutzerdefinierten Bean-Deklarationen definiert sind.

    
Ryba 21.06.2012 15:10
quelle
1

Das war eine Schlampe. Ein Mann in unserem Team hat es am Wochenende zum Laufen gebracht. Wir würden mit Unterstrich gehen, aber er hat es verstanden. Er entfernte @Controller von den Controller-Klassenattributen und ließ @RequestMapping für die Klasse leer. Auf die öffentlichen Methoden für Http get und put hat er "/2.0/" zum @RequestMapping hinzugefügt. Beispiel unten.

%Vor%

Viel Glück für alle. Dieses Problem hat gesaugt.

    
Robert Beltran 16.01.2013 18:30
quelle
1

Ich habe fast dasselbe getan wie Robert Beltran, aber ich habe @Controller Annotation für die Klasse hinterlassen. Wichtig ist, "/1.0/" in die Methode @RequestMapping für die Methoden zu schreiben, nicht in die Annotation der Klasse.
Mein Beispiel:

%Vor%     
Michal Korecki 11.02.2014 00:14
quelle
0

Die obige Antwort sollte korrigieren, aber stellen Sie sicher, dass Sie <mvc:annotation-driven/> aus Ihrer XML-Konfiguration entfernen. Andernfalls wird die Bean-Definition von dem einen Teil des Annotation-Driven-Tags überschrieben.

Siehe Java docs und die Quellcode für alle Konfigurationen, die Sie verpassen, wenn dieses Convenience-Tag entfernt wird.

    
Michael 30.09.2011 09:47
quelle

Tags und Links