Grails UrlMappings avec des valeurs de paramètre contenant "."
-
03-07-2019 - |
Question
Étant donné ce UrlMapping:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
Combiné avec ce contrôleur:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
Et avec ces demandes:
- http: // localhost: 8080 / app / foo / example.com donne le résultat "foobar = example"
- http: // localhost: 8080 / app / foo / examplecom donne le résultat " ; foobar = exemple_conc.
Il semble que Grails coupe le "foobar". paramètre au premier point ("."). Est-ce intentionnel? Existe-t-il une solution de contournement si je souhaite utiliser des paramètres contenant des points dans mes mappages d'URL?
La solution
Ceci peut être résolu en définissant ...
grails.mime.file.extensions = false
... dans Config.groovy.
Il semble que Grails tente de faire de la magie MIME derrière la scène en se basant sur le suffixe du nom de fichier.
Mise à jour: Quelques informations supplémentaires sur le Grails JIRA .
Il s'agit du code incriminé dans UrlMappingsFilter.java:
if(WebUtils.areFileExtensionsEnabled()) {
String format = WebUtils.getFormatFromURI(uri);
if(format!=null) {
MimeType[] configuredMimes = MimeType.getConfiguredMimeTypes();
// only remove the file extension if its one of the configured mimes in Config.groovy
for (MimeType configuredMime : configuredMimes) {
if (configuredMime.getExtension().equals(format)) {
request.setAttribute(GrailsApplicationAttributes.CONTENT_FORMAT, format);
uri = uri.substring(0, (uri.length() - format.length() - 1));
break;
}
}
}
}
WebUtils.areFileExtensionsEnabled () renvoie la valeur de "grails.mime.file.extensions". paramètre configuré dans Config.groovy.