gpt4 book ai didi

rest - 击中除索引以外的任何内容时,将使REST 404失效

转载 作者:行者123 更新时间:2023-12-02 14:51:40 24 4
gpt4 key购买 nike

当跟随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 Controller 中
import grails.rest.*;

class RestaurantController extends RestfulController {
static responseFormats = ['json', 'xml']
RestaurantController() {
super(Restaurant)
}
}

在阅读以上链接时,我想如果我打电话 GET <domain>/restaurant它会调用 index方法,这很好,这可行,但是当我调用 GET <domain>/restaurant/1我以为应该用1作为 show调用 id方法?但是我得到了404。当我打 GET <domain>/restaurant/show/2时,它可以正常工作,是我认为文档说的不对。

映射表中的 GET /books/${id} show,我不应该明确将 show放在URL中吗?

最佳答案

我知道这很烂,但是在这里:

您需要创建一个通用的rest Controller 并注释指向它的域类。

首先删除RestaurantController.groovy

然后创建一个BaseRestController(在src / main / groovy文件夹中)

src / main / groovy / 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 / domain / Restaurant.groovy
import grails.rest.*
@Resource(uri='/restaurants', formats=['json', 'xml'], superClass=BaseRestController)
class Restaurant {

String title

static constraints = {
}
}

您需要 在域类中而不是在 Controller 中指定格式。否则,它将被忽略并且XML将是默认值。
我将api端点命名为 餐厅而不是grails默认餐厅
现在您可以使用HTTP来连接RestFull应用程序,例如 http://localhost:8080/restaurants/1

关于rest - 击中除索引以外的任何内容时,将使REST 404失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com