我已经像这样在grails中配置了一些宁静的资源
"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")
但我想这个更通用
"/$controller/$id?"(resource: controller)
这不起作用......(得到404)
如何为 grails 中的 restful 资源配置通用 url 映射?
我已经像这样在grails中配置了一些宁静的资源
"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")
但我想这个更通用
"/$controller/$id?"(resource: controller)
这不起作用......(得到404)
如何为 grails 中的 restful 资源配置通用 url 映射?
似乎映射的“资源”部分是在启动时评估的,而不是在执行实际请求时评估的(玩弄这个猜测)。因此,我认为您需要根据应用程序启动时可用的域类动态地“预加载”您想要的一组 UrlMappings。这样的事情可能会奏效:
class UrlMappings {
static mappings = {
ApplicationHolder.application.getArtefacts('Domain').each { GrailsClass cl ->
"/${cl.propertyName}/$id?"(resource: cl.propertyName )
} ...
满足您需求的正确映射完全取决于您要实现的目标(无法从问题中确定)。
考虑一个通用映射:
"/$controller/$action?/$id?"{}
这会将 URL 的第一部分映射到同名的控制器,第二部分映射到该控制器的操作,第三部分映射到域类实例的唯一标识符。
使用此映射的示例:
/书/节目/2 控制器:bookController 动作:表演 编号:2 这将调用 book 控制器的 show 动作。 params.id 将为 2。 URL 中隐含的意图是显示图书对象的相关详细信息 id 为 2。 /问题/更新/6 控制器:问题控制器 行动:更新 编号:6 这将调用问题控制器的更新操作。 params.id 将为 6。 URL 中隐含的意图是更新问题的详细信息 id 为 6 的对象。