Grails UrlMappings con valori di parametro contenenti "."
-
03-07-2019 - |
Domanda
Dato questo UrlMapping:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
Combinato con questo controller:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
E con queste richieste:
- http: // localhost: 8080 / app / foo / example.com fornire l'output " foobar = esempio "
- http: // localhost: 8080 / app / foo / examplecom fornire l'output e quot ; foobar = examplecom "
Sembra che Grails tagli il "foobar" parametro al primo punto (". "). È intenzionale? Esiste una soluzione alternativa se desidero utilizzare i parametri contenenti punti nei miei mapping URL?
Soluzione
Questo può essere risolto impostando ...
grails.mime.file.extensions = false
... in Config.groovy.
Sembra che Grails stia provando a fare un po 'di magia MIME dietro la scena in base al suffisso del nome del file.
Aggiornato: alcune informazioni aggiuntive dal Grails JIRA .
Questo è il codice offensivo in 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 () restituisce il valore di " grails.mime.file.extensions " impostazione configurata in Config.groovy.