使用JAX-RS和UrlMappings的Grails用于RESTful服务

时间:2010-10-27 20:10:47

标签: json rest grails jax-rs url-mapping

我开始查看用于grails的JAX-RS插件,并认为这是主要的方式,因为它基于JSR-311而且我认为以下标准通常是聪明的事情做。然而,使用Grail的UrlMappings似乎我基本上实现了同样的事情。我想我错过了一些东西,然而,我们并没有做任何过于复杂的事情。我们基本上只需要通过API公开CRUD。使用两个版本执行相同操作的示例:

JAX-RS:

@PUT
@Consumes(['application/json'])
@Produces(['application/json'])
Response putUser(User user) {
  user.save(flush:true)
  ok user
}

的Grails:

def update = {
  def user = new User(params['user'])
  user.save(flush:true)
  render user as JSON
}

显然,这是一个过于简化的例子,就像我说的,也许我错过了一些重要的事情。另外,关于Grails内置机制的好处是我可以利用内容协商。

有人对此有任何意见吗?

2 个答案:

答案 0 :(得分:1)

我必须做出同样的决定,我发现使用URL映射更容易,因为API并不复杂,并且需要支持的API调用数量有限。

如果归结为基于LOE和能够支持实施的资源而更容易维护的内容。

答案 1 :(得分:0)

如果您直接为您的域模型创建Web服务,则jax-rs插件非常有用。它为您提供了一个“generate-resource”命令,可以自动为您的模型创建CRUD api。

grails generate-resource mydomain.Model

这部分似乎工作正常,但是,我遇到了一些插件的错误/问题,我最终不得不使用URL映射来实现REST服务。

虽然URL映射方法似乎更多编码,但它可以很好地工作。

import grails.converters.JSON

class ModelServiceController {
    def id = params.id
    def myModel = MyModel.findById(id)
    render myModel as JSON
}

这是grails REST的链接

http://grails.org/doc/1.0.x/guide/13.%20Web%20Services.html