2016-10-06 5 views
0

ich zwei Endpunkte haben wollen, dieAnfrage Mapping mit mehreren Wildcards

@RequestMapping(value="/**", method = { RequestMethod.GET}, produces = "application/json") 

@RequestMapping(value="/**/versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json") 

Wildcards im @RequestMapping haben, wenn ich eine Anfrage durchführen, die zu /**/versions/{versionId} gehen sollte sie den /** Endpunkt über den /**/versions/{versionId} Endpunkt lieber selbst obwohl die Anfrage übereinstimmen sollte.

Ich verwende:

<parent> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-parent</artifactId> 
    <version>Brixton.SR2</version> 
</parent> 
+1

Vielleicht könnten Sie Regex anstelle von Wildcard versuchen http://stackoverflow.com/questions/22410609/how-to-correct-spring-mvc-requestmapping-order – chmielu

+0

Können Sie Regex, die auf die Verzeichnisstruktur funktioniert? Sie scheinen nur für diesen einen Abschnitt zwischen den Schrägstrichen zu arbeiten, z.B. Wenn Sie "/ *." auf der Anfrage Mapping, das funktioniert für/test, aber nicht/test/test2/ – Barnesy

Antwort

0

Ich denke, man muss nur die Reihenfolge Ihrer @RequestMapping Methoden ändern.

Für mich funktioniert http://localhost:8080/versions/1 gibt version 1 zurück.

Und für jede andere Anfrage ohne version/{versionId} gibt es index zurück.

@Controller 
public class DemoController { 

    @RequestMapping(value="/**/versions/{versionId}", method = RequestMethod.GET) 
    @ResponseBody 
    public String version(@PathVariable String versionId){ 
     return "version " + versionId; 
    } 

    @RequestMapping(value="/**", method = RequestMethod.GET) 
    @ResponseBody 
    public String index(){ 
     return "index"; 
    } 
} 
+0

Wenn Sie eine Pfadvariable auf dem Mapping aus irgendeinem Grund hinzufügen, funktioniert es nicht, irgendwelche Ideen warum? @RequestMapping (Wert = {"{p1}"}) – Barnesy

+0

@Barnesy Was funktioniert nicht? Arbeitet es ohne PathVariable und nur die Methoden neu anordnen? – Patrick

0

Wenn Sie recht komplizierte Anfrage Mapping wollen versuchen handle zu überschreiben, wie es hier ist: How to define RequestMapping prioritization als Sie:

if (urlPath.contains("/versions")) { 
    /* forward to method with @RequestMapping(value="/get/versions/{versionId}") 
} 

Statt:

@RequestMapping(value="/**/versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json") 

Verwendung:

@RequestMapping(value="/response_for_versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json") 

Nun sollten alle ".../versions/{versionId}" an "/ response_for_versions/{versionId}" weitergeleitet werden und alle anderen werden mit "/ **" behandelt

+0

1) Dies führt aufgrund der if-Bedingung zu einer Kinderschleife. 2) Es gibt einen Grund für die/**, ich möchte den Wert davon bekommen. – Barnesy

+0

Sie haben Recht. Mein Fehler. Vielleicht können Sie an requestMapping weiterleiten, das keine Zeichenfolge "/ versions" enthält, zum Beispiel "/ response_for_versions/{versionId}". Nur der Gedanke. – chmielu

Verwandte Themen