【问题标题】:Gerneric url mapping for restful resources in grailsgrails中restful资源的通用url映射
【发布时间】:2011-05-25 06:47:44
【问题描述】:

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

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

但我想要这个更通用的喜欢

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

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

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

【问题讨论】:

    标签: rest grails url-mapping


    【解决方案1】:

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

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

    【讨论】:

    • 您的猜测可能是正确的,您的解决方案有效,谢谢。但是,如果 grails 评估每个请求的资源映射,就像在控制器/动作映射中那样,那将是非常整洁的
    【解决方案2】:

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

    考虑一个通用映射:

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

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

    使用此映射的示例:

    /书/节目/2 控制器:bookController 动作:表演 编号:2 这将调用 book 控制器的 show 动作。 params.id 将为 2。 URL 中隐含的意图是显示书籍对象的相关详细信息 id 为 2。 /问题/更新/6 控制器:问题控制器 行动:更新 编号:6 这将调用问题控制器的更新操作。 params.id 将为 6。 URL 中隐含的意图是更新问题的详细信息 id 为 6 的对象。

    【讨论】:

    • 谢谢,但我不想映射到操作,而是映射到问题和 13.1“REST”Grails 用户 Guide 中解释的资源。但我不想明确地命名所有资源(书籍、作者等),我想以一种通用的方式来做,正如你对动作所解释的那样(因为你没有明确地命名动作)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多