2016-06-01 4 views
2

in einer Feder Anwendung passende, habe ich einen Controller mit folgenden Anmerkung:Frühling und mehrere Regler einen einzelnen Pfad variable

@RequestMapping(value = "/{category}/", method = GET) 

Ich mag andere Steuerungen habe einen einzigen vordefinierten Pfad variable Anpassungs, z.B

@RequestMapping(value = "/payment/", method = GET) 

Ich denke, es ist machbar, da ich mehrere Websites sehe, die diese Art von URLs implementieren.

z. Sie können mehrere Pfade für die Kategorien haben

http ://www.mysite.com/computer/ 
http ://www.mysite.com/smartphone/ 
http ://www.mysite.com/printer/ 

und dann andere für „statische Inhalte“

http ://www.mysite.com/payment/ 
http ://www.mysite.com/shopping-bag/ 
http ://www.mysite.com/wish-list/ 

jemand zeigen kann mir, wie es zu tun?

+0

Das ist ein interessanter Punkt. Wie auch immer, schauen Sie sich www.zalando.de an, sie tun das und ich würde gerne verstehen, wie –

+0

Versuchen Sie, einige Beispiele zu geben. Ich kann nicht herausfinden, was du versuchst zu tun. – chrylis

+0

@chrylis siehe Beispiel, oder werfen Sie einen Blick auf die Website eine im vorherigen Kommentar erwähnt –

Antwort

-2

Es ist machbar, wie Sie es schon getan haben. Wenn meine Seite http://example.com-

@RequestMapping(value = "/test", method = RequestMethod.GET) 

obigen Code ist, wird erstellen http://example.com/test

Wenn ich einen URI mit statischen Namen und einer Variablen (http://example.com/test/variableName) wollen, dann würde ich bedienen-

@RequestMapping(value = "/test/{variableName}", method = RequestMethod.GET) 
+0

Das ist nicht, was ich fragte –

+0

Aus der Beschreibung, scheint, wie Sie eine URI www.mysite.com/wish-list erstellen möchten, wo Wunschliste hart codiert ist. Nicht wahr? – Sanim

1

ich gegoogelt wenig und ich fand innerhalb der Spring docs etwas, das ich nie versucht habe. Ich denke, Sie könnten Regex in die Anforderungszuordnung verwenden, um den Trick zu machen.

Die dynamische Pfadvariablen sollte bleiben, wie Sie beschrieben, das heißt

@RequestMapping(value = "/{category}/", method = GET) 
public String dynamicController(@PathVariable String category){ 
    ... 
} 

Diese in der Theorie wie alle URLs entsprechen:

protocol://localhost:8080/123/ 
protocol://localhost:8080/random-text/ 
protocol://localhost:8080/whatever-it-comes/ 

Der statische Controller wie folgt geändert werden sollte:

@RequestMapping(value = "/{accepted_path:^payment$}/", method = GET) 
public String staticController(){//you don't need to consume the path 
    //variable accepted_path 
    ... 
} 

Die Verwendung der Regex ^payment$ sollte sicherstellen, dass t Hut der URL

protocol://localhost:8080/payment/ 

wird nur von staticController binded werden.

Sie können auch mehrere akzeptierte Pfadvariablen anhängen. Z.B. wenn die staticController müssen die folgenden URLs entsprechen

protocol://localhost:8080/payment/ 
protocol://localhost:8080/pay/ 

Dann sollten Sie "/{accepted_path:^payment$}/" mit "/{accepted_path:^payment|pay$}/" ersetzen.

Wird nicht getestet, sollte aber den Trick machen!

+0

Danke Ro, ich werde es am Abend versuchen –

Verwandte Themen