Grails 3 Restful Link Generator(没有动作)

时间:2016-12-15 23:21:47

标签: rest grails

有没有办法重新配置Grails 3链接生成器以创建Restful链接,即localhost:8080/book/{id}而不是包含URL中的操作的旧样式localhost:8080/book/show/{id}

我希望在回复的位置标题中包含用于保存操作的宁静网址。

1 个答案:

答案 0 :(得分:0)

我一直在使用此Grails Restful Link Generator作为解决方法。我对此并不十分满意,但这是迄今为止我能够提出的最好的。

<强> 1。在src/main/groovy中创建一个特征,从网址中删除多余的操作

import grails.web.mapping.LinkGenerator

trait RestfulLinkGeneratorTrait {

    LinkGenerator grailsLinkGenerator

    String generateLink(Map map) {
        map.controller = map.controller ?: this.controllerName
        map.absolute = map.absolute ?: true
        map.action = map.action ?: "show"
        grailsLinkGenerator.link(map).replace("/$map.action", "")
    }
}

<强> 2。在您的控制器上实施RestfulLinkGenerator并致电generateLink(id: obj.id)以生成链接。

@Secured('ROLE_USER')
class BookController extends RestfulController implements RestfulLinkGeneratorTrait {

    //... other methods ...//

    @Transactional
    def save() {
        // ... save you resource ... //
        response.addHeader(HttpHeaders.LOCATION, generateLink(id: book.id))
        respond book, [status: CREATED, view: 'show']
    }

    //... other methods ...//

}