2

我已经像这样在grails中配置了一些宁静的资源

"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")

但我想这个更通用

"/$controller/$id?"(resource: controller)

这不起作用......(得到404)

如何为 grails 中的 restful 资源配置通用 url 映射?

4

2 回答 2

2

似乎映射的“资源”部分是在启动时评估的,而不是在执行实际请求时评估的(玩弄这个猜测)。因此,我认为您需要根据应用程序启动时可用的域类动态地“预加载”您想要的一组 UrlMappings。这样的事情可能会奏效:

class UrlMappings {
static mappings = {
        ApplicationHolder.application.getArtefacts('Domain').each { GrailsClass cl ->
           "/${cl.propertyName}/$id?"(resource: cl.propertyName )            
        } ...
于 2011-05-26T03:49:33.253 回答
0

满足您需求的正确映射完全取决于您要实现的目标(无法从问题中确定)。

考虑一个通用映射:

"/$controller/$action?/$id?"{}

这会将 URL 的第一部分映射到同名的控制器,第二部分映射到该控制器的操作,第三部分映射到域类实例的唯一标识符。

使用此映射的示例:

/书/节目/2

控制器:bookController
动作:表演
编号:2

这将调用 book 控制器的 show 动作。
params.id 将为 2。

URL 中隐含的意图是显示图书对象的相关详细信息
id 为 2。

/问题/更新/6

控制器:问题控制器
行动:更新
编号:6

这将调用问题控制器的更新操作。
params.id 将为 6。

URL 中隐含的意图是更新问题的详细信息
id 为 6 的对象。
于 2011-05-25T18:09:09.180 回答