Domanda

Progettazione mio RESTful API, vorrei uso seguente URI

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

per es.

http://myserver/earth/50.2;29.1

Qual è l'annotazione appropriata di un metodo tale in Spring MVC? È questo il successivo ok?

@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
}

Se questo è ok -? Ciò che è buono per @MaskFormat("###-##-####")

È stato utile?

Soluzione

Il tuo modello URI ha due problemi:

  • Alcuni contenitori servlet può trattare ; come delimitatore e tagliare l'URI (ad esempio Tomcat bug 30535 ). Così, come una soluzione alternativa è possibile utilizzare un po 'di carattere diverso, come ,.
  • Per default Spring MVC tratta puntano in URI come separatore ampliamento e pezzi speciali troppo. È possibile ignorare specificando modello regexp per variabile del percorso.

Quindi, avrete qualcosa come

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

Si noti che dal momento che la gestione di estensione che si è disabilitata di Primavera, è necessario attivare manualmente se ne avete bisogno (questo richiede anche regexp più restrittive per evitare di confondere punto decimale con separatore estensione):

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

Per @MaskFormat probabilmente significa un'annotazione da mvc-showcase (Si noti che è nota un built-in annotazione). Insieme con MaskFormatAnnotationFormatterFactory dimostra le nuove faclilities formattazione alle variabili Converti percorso (cioè stringhe) da argomenti del metodo. In realtà si converte Strings a Strings, quindi è utilizzato solo per la validazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top