2014-09-11 19 views
5

Lese this (Frühling 3) Artikel aus dem Jahr 2010, bespricht es eine Verlängerung mit einer bequemen Möglichkeit bietet optionale Pfadsegmente enthalten:Optionale Pfadsegmente in Spring MVC

@RequestMapping("/houses/[preview/][small/]{id}") 
public String handlePreview(@PathVariable long id, @PathVariable("preview/") boolean preview, @PathVariable("small/") boolean small) { 
    return "view"; 
} 

Ich weiß, ich könnte nur eine Nummer implementieren die gleiche Wirkung der Anfrage Zuordnungen zu erreichen:

@RequestMapping(value="/houses/preview/{id}") 
... 

@RequestMapping(value="/houses/{id}") 
... 
~~~ snip ~~~ 

Aber je nach der Anzahl der möglichen Permutationen, es wie eine sehr ausführliche Option zu sein scheint.

Bietet eine spätere Version von Spring (nach 3) eine solche Möglichkeit? Gibt es alternativ einen Mechanismus zum Verketten von Teilen der Anforderungs-URL, um eine größere Antwortverfahrensignatur zu liefern?

aktualisieren

This answer auf eine Frage zu Sharing-Pfadvariablen und Anforderungsparameter im Zusammenhang schlägt einen Ansatz wie:

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) 
    @ResponseBody 
    public String getCampaignDetails(
     @PathVariable("id") String id) 
    { 
     ~~~ snip ~~~ 

Aber der Weg Variable nicht gesetzt werden kann, auf null. Geht man einfach auf /campaigns wird eine 400 Antwort zurückgeben.

+1

Wollen Sie wie http://stackoverflow.com/questions/2745471/spring- web-mvc-use-same-request-mapping-for-request-parameter-und-pfad-variable # 2746361 –

+0

Fast, Javis Antwort mit den mehreren Anfragewerten - 'value = {"/campaigns ","/campaigns/{ id} "}" ist fast da, aber ich möchte feste Segmente in der URL zuordnen. – Mikaveli

+0

Diese Frage bereits in einem Forum diskutiert, das ist die gleiche Frage hier: http://java.dzone.com/articles/spring-3-webmvc-optional-path –

Antwort

8

Warum verwenden Sie nicht java.util.Optional, wenn Sie Java 1.8 verwenden. Um Ihren späteren Beispiel zu nehmen, können Sie eine 400-Antwort abwenden mit legte eine Optional<String> statt String repräsentiert Ihre eventualy Pfad wie folgt aus:

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) 
@ResponseBody 
public String getCampaignDetails(
    @PathVariable("id") Optional<String> id) 
{ 
    if(id.isPresent()){ 
     model.addAttribute("id", id.get());//id.get() return your String path 
    } 
}