Spring MVC: Annotazione corretto del metodo Controller per RESTful URI tra cui ';'
-
04-10-2019 - |
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("###-##-####")
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 String
s a String
s, quindi è utilizzato solo per la validazione.