gpt4 book ai didi

rest - Grails REST Controller 响应不正确的内容类型

转载 作者:行者123 更新时间:2023-12-04 01:09:14 27 4
gpt4 key购买 nike

我正在尝试编写一个应该始终以 JSON 响应的 Grails REST Controller 。 Controller 如下图所示:

class TimelineController {

static allowedMethods = [index: "GET"]
static responseFormats = ['json']

TimelineService timelineService

def index(TimeLineCommand command) {
List<TimelineItem> timeline = timelineService.currentUserTimeline(command)
respond timeline
}
}

我正在使用 respond方法是 Grails 的 REST 支持的一部分,因此内容协商用于确定要呈现的响应类型。在这种特殊情况下,我希望选择 JSON,因为 Controller 指定
    static responseFormats = ['json']

此外,我编写了(并在 Spring 中注册)以下渲染器来自定义为 List<TimelineItem> 返回的 JSON 格式。
class TimelineRenderer implements ContainerRenderer<List, TimelineItem> {

@Override
Class<List> getTargetType() {
List
}

@Override
Class<TimelineItem> getComponentType() {
TimelineItem
}

@Override
void render(List timeline, RenderContext context) {

context.contentType = MimeType.JSON.name
def builder = new JsonBuilder()

builder.call(
[items: timeline.collect { TimelineItem timelineItem ->

def domainInstance = timelineItem.item

return [
date: timelineItem.date,
type: domainInstance.class.simpleName,
item: [
id : domainInstance.id,
value: domainInstance.toString()
]
]
}]
)

builder.writeTo(context.writer)
}

@Override
MimeType[] getMimeTypes() {
[MimeType.JSON] as MimeType[]
}
}

我写了一些功能测试,可以看到虽然我的渲染器被调用了,解析的内容类型是 text/html ,因此 Controller 返回 404,因为它找不到具有预期名称的 GSP。

我强烈怀疑这个问题与使用自定义渲染器有关,因为我有另一个几乎相同的 Controller ,它不使用自定义渲染器并且它正确解析了内容类型。

最佳答案

看起来您必须创建一个空白(至少)index.gsp在下面

grails-app/views/timeline/

使渲染器工作。我成功地将内容类型取回 application/json
这种行为让我很困惑,我仍在调查它。这值得一个 JIRA 问题。如果您需要,我可以将我的虚拟应用程序推送到 github。

更新:
在 github 中创建的问题(带有示例应用程序的链接)。
https://github.com/grails/grails-core/issues/716

关于rest - Grails REST Controller 响应不正确的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264953/

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