官方的Grails文档说
脚手架插件的2.0.x版本包含不同的脚手架模板,这些模板与Grails 2.3及更高版本中引入的新REST保持一致。(从这里取来http://grails.org/doc/latest/guide/scaffolding.html)
但是我不能让RESTfulness和脚手架一起工作(或者我不理解这个概念)。
让我们从头开始:
grails create-app myapp
cd myapp/
grails create-domain-class Book
grails create-scaffold-controller myapp.Book向域类中添加字段
class Book {
String text
static constraints = {
}
}然后用grails run-app运行这个应用程序。在http://localhost:8080/myapp/上冲浪显示脚手架工作得很好:
http://localhost:8080/myapp/book/index页面显示图书列表http://localhost:8080/myapp/book/show/1页面显示id =1的书籍的详细信息http://localhost:8080/myapp/book/create页面创建一本书让我们看看休息怎么样。官方文档说我应该使用像http://localhost:8080/myapp/books/...这样的URL作为其余的工具,但是任何访问应用程序的尝试,比如这个curl -i -H "Accept: application/json" localhost:8080/myapp/books/1都会用一大堆HTML返回404。
好的,让我们仔细阅读文档:
在Grails中创建RESTful API的最简单方法是将域类公开为REST资源。这可以通过将grails.rest.Resource转换添加到任何域类来完成。
没问题,现在Book标题是
import grails.rest.*
@Resource(uri='/books') class Book {现在在http://localhost:8080/myapp/上冲浪显示脚手架坏了:
http://localhost:8080/myapp/book/index页面显示图书列表http://localhost:8080/myapp/book/create页面显示xml输出<?xml version="1.0" encoding="UTF-8"?><book><text /></book>。我曾在URLMappings.groovy中玩过@Resource和“/books”(参考资料:“book”),但没有找到任何可行的解决方案,使得脚手架和RESTfulness可以背靠背地工作。事实上,我设法使他们分开工作。
更新
我找到了实现预期目标的方法。我发现的方法是:
@Resource(uri = "/books")标记图书类。class HumanBookController {static scaffold = Book}创建带脚手架的专用控制器现在,带有像http://localhost:8080/myapp/humanBook/index这样的URL的脚手架GUI页面工作得很好。无论是json请求还是使用http://localhost:8080/myapp/books/1之类的URL都能很好地处理。但是,让两个控制器为公共web和json做同样的事情并不优雅。
发布于 2014-01-06 20:33:12
你可以这样做:
import grails.rest.RestfulController
class BookController extends RestfulController {
static responseFormats = ['html', 'json']
BookController() {
super(Book)
}
}然后在UrlMappings.groovy中:
"/books"(resources:"book")
"/$controller/$action?/$id?(.${format})?"{
constraints {
// apply constraints here
}
}不需要在域中添加@Resource。现在可以让/book/1.json或/book/1.html指向正确的位置。您可能仍然需要执行grails generate-view Book来生成视图。但是,尽管您需要为html生成视图,但是您只保留单个控制器和路径。
发布于 2014-03-03 19:34:42
我和你有同样的问题。这可能是一个微不足道的解决方案,并不适用于每一种情况,但请尝试更新Grails版本。至于我:grails2.3.4 -> Grails2.3.6工作过。希望这对任何人都有帮助。
发布于 2014-06-01 01:57:09
我目前正在使用Grails 2.4.0,解决方案是通过这样做的:
结果是你可以:
我不邪恶,我知道。我找到了这,它让我开始工作。
https://stackoverflow.com/questions/19465421
复制相似问题