Grails urlMappings com valores de parâmetro contendo “”
-
03-07-2019 - |
Pergunta
Dada esta UrlMapping:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
Em conjunto com este controlador:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
E com estes pedidos:
- http: // localhost: 8080 / app / foo / example.com dar o "foobar = exemplo" de saída
- http: // localhost: 8080 / app / foo / examplecom dar a saída " foobar = examplecom "
Parece que Grails corta o parâmetro "foobar" no primeiro ponto ( ""). Isso é intencional? Existe uma solução alternativa se eu quiser usar os parâmetros que contêm pontos em meus mapeamentos de URL?
Solução
Isto pode ser resolvido através da definição ...
grails.mime.file.extensions = false
... em Config.groovy.
Parece que Grails está tentando fazer alguma mágica MIME por trás da cena com base no sufixo do nome de arquivo.
Atualizado: Algumas informações adicionais a partir do Grails JIRA .
Este é o código incorreto em 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 () retorna o valor das "grails.mime.file.extensions" definição configurada em Config.groovy.