Grails urlMappings mit Parameterwerten „“
-
03-07-2019 - |
Frage
In Anbetracht dieser UrlMapping:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
Mit diesem Controller kombiniert:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
Und mit diesen Anfragen:
- http: // localhost: 8080 / app / foo / example.com gibt den Ausgang "foobar = example"
- http: // localhost: 8080 / app / foo / examplecom den Ausgang geben " foobar = examplecom "
Es scheint, wie Grails die "foobar" Parameter am ersten Punkt schneidet ( ""). Ist das Absicht? Gibt es eine Behelfslösung, wenn ich will Parameter verwenden Punkte in meiner URL-Zuordnungen enthalten?
Lösung
Dies kann durch Einstellung gelöst werden ...
grails.mime.file.extensions = false
... in Config.groovy.
Es scheint, wie Grails versucht, eine MIME-Magie hinter den Kulissen zu tun, basierend auf dem Dateinamen-Suffix.
Aktualisiert: Einige zusätzliche Informationen aus dem Grails JIRA .
Dies ist der säumige Code 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 () gibt den Wert des "grails.mime.file.extensions" in Config.groovy konfiguriert-Einstellung.