在Grails 3中将静态文件呈现为URI

时间:2016-07-01 07:30:40

标签: grails grails-3.1

在Grails 2.x中,以下作品:

class UrlMappings {

    static mappings = {
        /**
         * Serving the index.html directly
         */
        "/"(uri: "/ng/app/index.html")
    }
}

鉴于index.html目录中有web-app/ng/app/个文件。现在,当我们浏览Grails 2中的网址http://localhost:8080时,index.html会自动呈现。

在Grails 3中,我在index.html中添加了相同的src/main/webapp/文件,我可以像http://localhost:8080/static/index.html一样正确地浏览它。

所以,我试图在UrlMappings.groovy

中做同样的事情
class UrlMappings {

    static mappings = {
        /**
         * Serving the index.html directly
         */
        "/"(uri: "/static/index.html")
    }
}

但是这给了我错误{"message":"Internal server error","error":500}

ERROR org.grails.web.errors.GrailsExceptionResolver - UrlMappingException occurred when processing request: [GET] /
Unable to establish controller name to dispatch for [null]. Dynamic closure invocation returned null. Check your mapping file is correct, when assigning the controller name as a request parameter it cannot be an optional token!. Stacktrace follows:
grails.web.mapping.exceptions.UrlMappingException: Unable to establish controller name to dispatch for [null]. Dynamic closure invocation returned null. Check your mapping file is correct, when assigning the controller name as a request parameter it cannot be an optional token!
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我使用Grails 3.1.8 Angular配置文件创建了我的应用程序,后来删除了与Grails GSP插件,资产管道等相关的Angular相关内容。

2 个答案:

答案 0 :(得分:1)

这似乎是Grails 3的一个悬而未决的问题,计划在Grails 3.2.0中得到解决。

https://github.com/grails/grails-core/issues/9908

答案 1 :(得分:1)

从URLMapping处理程序的Grails 3.x's实施开始,您只能在URL映射中指定controllerviewredirect。因此,uri将失败,因为它不会映射到任何控制器或视图。

虽然在修改源代码之后,我找到了一个可能对您的用例有用的解决方法。您实际上可以在此处发出redirect,因为重定向将能够处理uri

因此,您的URLMappings.groovy应该像 - >

class UrlMappings {

    static mappings = {
        /**
        * Serving the index.html directly
        */
        "/"(redirect: [uri: "/static/index.html"])
    }
}

此代码适用于我Grails 3.1.8

我希望这会有所帮助。