用于grails中的restful资源的通用url映射

时间:2011-05-25 06:47:45

标签: rest grails url-mapping

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

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

但是我希望这更通用,比如

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

哪个不起作用......(获得404)

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

2 个答案:

答案 0 :(得分:2)

看起来映射的“资源”部分是在启动时评估的,而不是在执行实际请求时进行评估(猜测来自于此)。因此,我认为您需要根据应用程序启动时可用的Domain类动态“预加载”您想要的UrlMappings集。这样的事情可能会起到作用:

class UrlMappings {
static mappings = {
        ApplicationHolder.application.getArtefacts('Domain').each { GrailsClass cl ->
           "/${cl.propertyName}/$id?"(resource: cl.propertyName )            
        } ...

答案 1 :(得分:0)

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

考虑通用映射:

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

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

使用此映射的示例:

/book/show/2

Controller: bookController
Action: show
id: 2

This will call the show action of the book controller.
params.id will be 2.

The intention implied in the URL is to show relevant details for a book object 
with an id of 2.

/question/update/6

Controller: questionController
Action: update
id: 6

This will call the update action of the question controller.
params.id will be 6.

The intention implied in the URL is to update the details for a question
object with an id of 6.