2011-07-12 11 views
2

Je me demandais si je peux personnaliser mon URL dans le contrôleur pour accepter les valeurs nullesmodèle Spring MVC Url

@RequestMapping(
      value = "foo/{y}/{x}", 
      method = RequestMethod.GET) 
    public ModelAndView doSmth(@PathVariable(value = "x") String x, 
           @PathVariable(value = "y") String y) { 
} 

Ici, dans mon cas, X, Y peut être une chaîne vide. Comment pourrais-je gérer smth comme ça pour laisser cette méthode sur le contrôleur gérer cette url?

+0

Quelles sont toutes les combinaisons de X et Y? Est-il possible de le diviser en plusieurs méthodes - prétraiter des variables et faire de la logique dans une méthode privée commune? – Random

+0

BTW: http://stackoverflow.com/questions/5879666/requestmapping-controlers-and-dynamic-urls – Random

Répondre

1

Si vous souhaitez prendre en charge des valeurs facultatives, les variables de chemin ne sont pas adaptées. Les paramètres de demande (utilisant @RequestParam) sont une meilleure idée, car ils prennent en charge facilement les valeurs optionnelles à l'aide de l'attribut required.

Si vous voulez vraiment soutenir les variables de chemin en option, alors vous devez surcharger vos applications, à savoir

@RequestMapping(value = "foo/{y}/{x}") 
public ModelAndView doSmth(@PathVariable(value = "x") String x, @PathVariable(value = "y") String y) 

@RequestMapping(value = "foo/{y}") 
public ModelAndView doSmth(@PathVariable(value = "y") String y) 

@RequestMapping(value = "foo") 
public ModelAndView doSmth() 
+0

Le fait est que cette URL contient des champs mulible qui peuvent contenir une chaîne vide non nulle. Si je suis cette méthodologie, j'aurai besoin d'écrire de nombreuses méthodes de surcharges. J'ai besoin d'éviter ça !! – Echo

+0

@Echo: Oui, c'est pourquoi je viens de dire d'utiliser '@ RequestParam' à la place. – skaffman

+0

J'essaie de le supporter en utilisant @RequestMapping /foo/$ {x}/[# si x? Has_content] $ {y} [#else] Ce que je peux faire pour passer String vide [/ # if] – Echo

1

Je ne pense pas, c'est une bonne URL. Cela peut être très déroutant pour les utilisateurs. Pourquoi ne pas essayer celui-ci?

@RequestMapping("foo/x/{x}/y/{y}") 
public ModelAndView doSmth(@PathVariable String x, @PathVariable String y) 
+0

Merci. Je n'ai pas essayé car j'ai utilisé une autre méthodologie, mais notre solution est intéressante à essayer. – Echo