2010-09-22 23 views
0

la conception de mon API RESTful, je voudrais utiliser URI suivantSpring MVC: Annotation correcte de la méthode du contrôleur pour l'URI RESTful, y compris ';'

http://[HOST]/[PLANET]/[LAT];[LONG] 

par exemple

http://myserver/earth/50.2;29.1 

Quelle est l'annotation appropriée d'une telle méthode dans Spring MVC? Est-ce le suivant?

@RequestMapping(value = "/{planet}/{lat};{long}", method = RequestMethod.GET) 
public String showInfoAboutCoords(
    @PathVariable final String planet, 
    @PathVariable final String lat, 
    @PathVariable final String long, 
    final HttpServletResponse response) { 
     // Implementation 
} 

Si celui-ci est correct - ce qui est bon pour @MaskFormat("###-##-####")?

Répondre

2

Votre modèle URI a deux problèmes:

  • Certains conteneurs de servlets peuvent traiter ; comme séparateur et rogner l'URI (par exemple Tomcat) de bug 30535. Donc, comme une solution de contournement, vous pouvez utiliser un caractère différent, comme ,.
  • Par défaut, Spring MVC traite le point dans l'URI comme un séparateur d'extension et le découpe également. Vous pouvez le remplacer en spécifiant un motif regexp pour la variable de chemin.

Ainsi, vous aurez quelque chose comme

@RequestMapping(value = "/{planet}/{lat:.*},{long:.*}", method = RequestMethod.GET) 

Notez que depuis que vous avez désactivé la manipulation d'extension de printemps, vous devez activer manuellement si vous en avez besoin (cela nécessite aussi regexp plus restrictive pour éviter la confusion point décimal avec séparateur d'extension):

@RequestMapping(value = 
    {"/{planet}/{lat:.*},{long:\\d+\\.\\d+}", 
     "/{planet}/{lat:.*},{long:\\d+\\.\\d+}.*"}, 
    method = RequestMethod.GET) 

par @MaskFormat vous dire probablement une annotation de mvc-showcase (notez que ce produit est intégré dans l'annotation). Avec MaskFormatAnnotationFormatterFactory, il démontre les nouvelles possibilités de formatage pour convertir les variables de chemin (c'est-à-dire les chaînes) en arguments de méthode. En fait, il convertit String s en String s, donc il est utilisé uniquement pour la validation.

+0

Merci, cela fonctionne très bien. Et oui, je faisais référence à l'annotation de 'mvc-showcase'. –