Grails UrlMappings مع قيم المعلمات التي تحتوي على "."
-
03-07-2019 - |
سؤال
بالنظر إلى UrlMapping هذا:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
جنبا إلى جنب مع وحدة التحكم هذه:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
ومع هذه الطلبات:
- http://localhost:8080/app/foo/example.com إعطاء الإخراج "foobar = مثال"
- http://localhost:8080/app/foo/examplecom إعطاء الإخراج "foobar=examplecom"
يبدو أن Grails تقطع معلمة "foobar" عند النقطة الأولى (".").هل هذا مقصود؟هل هناك حل بديل إذا كنت أرغب في استخدام المعلمات التي تحتوي على نقاط في تعيينات عناوين URL الخاصة بي؟
المحلول
ويمكن حل هذه المشكلة عن طريق وضع...
grails.mime.file.extensions = false
...في التكوين. رائع.
يبدو أن Grails تحاول القيام ببعض سحر MIME خلف الكواليس بناءً على لاحقة اسم الملف.
محدث: بعض المعلومات الإضافية من جريلز جيرا.
هذا هو الكود المخالف في 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() بإرجاع قيمة الإعداد "grails.mime.file.extensions" الذي تم تكوينه في Config.groovy.
لا تنتمي إلى StackOverflow