当关注http://grails.org/doc/latest/guide/webServices.html#restfulControllers以创建RESTful Web服务时,当我点击索引以外的任何内容时,我收到404错误。
在Bootstrap.groovy
我有
def init = { servletContext ->
new Restaurant(title:"mourne seafood").save()
new Restaurant(title:"RBG").save()
}
在我的Restaurant.groovy
域类中
class Restaurant {
String title
static constraints = {
}
}
在我的RestaurantController.groovy
REST控制器中我有
import grails.rest.*;
class RestaurantController extends RestfulController {
static responseFormats = ['json', 'xml']
RestaurantController() {
super(Restaurant)
}
}
我想在阅读上面的链接时,如果我打电话
GET <domain>/restaurant
它会调用index
方法,这很好,这是有效的,但是当我打电话时
GET <domain>/restaurant/1
我认为它应该将show
方法称为id
?但是我得到了404.当我点击GET <domain>/restaurant/show/2
时,它正常工作我错误地认为当文档说出来时
GET /books/${id} show
我不应该在URL中明确地放置show
吗?
答案 0 :(得分:0)
我知道这很糟糕,但现在是:
您需要创建一个通用的rest控制器并注释指向它的域类。
首先删除RestaurantController.groovy
然后创建一个BaseRestController(在src / main / groovy文件夹中)
的src /主/常规/ BaseRestController.groovy
import grails.rest.*;
class BaseRestController<T> extends RestfulController<T> {
BaseRestController(Class<T> domainClass) {
this(domainClass, false)
}
BaseRestController(Class<T> domainClass, boolean readOnly) {
super(domainClass, readOnly)
}
@Override
def show() {
println 'showing...'
respond queryForResource(params.id)
}
}
聚苯乙烯。我只是覆盖索引操作以显示它的工作原理 现在您可以注释域类
的grails-app /域/ Restaurant.groovy
import grails.rest.*
@Resource(uri='/restaurants', formats=['json', 'xml'], superClass=BaseRestController)
class Restaurant {
String title
static constraints = {
}
}
您需要指定域类中的格式,而不是控制器中的格式。否则它将被忽略,XML将是默认的。 我将api端点命名为 restaurants ,而不是grails默认餐厅 现在您可以为您的RestFull应用提供HTTP,例如http://localhost:8080/restaurants/1