【问题标题】:How to change grails default renderer如何更改 grails 默认渲染器
【发布时间】:2014-01-27 07:07:48
【问题描述】:

我只使用 grails 来开发支持的服务,并且 UI 是用 angularJS 或其他技术完成的。基本上这意味着我没有写任何“视图”。 我没有覆盖控制器中的任何 CRUD 方法。

我的控制器如下所示:

class EmployeeController extends RestfulController {
    EmployeeController() {
        super(Employee)
    }
}

在这种情况下,当从 浏览器 发出 GET 请求时,grails 的响应如下: HTTP 状态 404 - /file-tracker/WEB-INF/grails-app/views/employee/show.jsp

我猜 grails 默认会渲染视图。 但是当 curl 发出相同的 GET 请求时,我得到了数据。

怎么了?我是否必须重写“显示”操作并显式呈现 JSON(因为我需要 JSON 数据作为响应)?

【问题讨论】:

    标签: grails view action


    【解决方案1】:

    这是因为content negotiation。线索是Accept HTTP 标头,它是由浏览器发送的,如果您没有明确定义,则不是curl 发送的。

    看看RestfulController源代码和respond方法的定义。

    【讨论】:

    • 感谢@Alexander,您的意思是默认情况下浏览器不发送接受。因为,我从 curl 发送 Accept。
    • 不,每个浏览器都会发送 Accept 标头。例如,我的 Chrome 发送 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    • 哦...我不确定是什么问题? grails 对 Accept 标头做些什么?来自 curl,带有 Accept 标头 - 它适用于 curl,没有 Accept 标头 - 来自浏览器的 404(我假设浏览器正在设置 Accept) - 来自 angularJS 应用程序的 404,带有/不带有 Accept - 404
    • 与上述评论相同,只是格式正确:哦...我不确定是什么问题? grails 对 Accept 标头做些什么?来自 curl,带有 Accept 标头 - 它可以工作,来自 curl,没有 Accept 标头 - 404,来自浏览器(我假设浏览器正在设置 Accept) - 404,来自带有/不带有 Accept 的 angularJS 应用程序 - 404
    • 是的,Grails 处理 Accept 标头。在我提供的有关内容协商的链接中进行了描述。另外,学习内容协商后,研究一下RestfulController的源码会有帮助。
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多