混合GSP和JSON视图时如何设置首选视图分辨率

时间:2019-05-21 13:59:14

标签: json angularjs rest grails grails3

我正在使用angularjs配置文件维护grails 3.3.8应用。

REST API和angularjs资产由同一grails应用程序提供。目前,我不想将应用程序分为两个应用程序。

该应用程序使用JSON视图来呈现资源的JSON响应。 该应用程序还使用GSP视图插件来提供初始index.gsp来服务angularjs应用程序。

由于使用了GSP视图插件,因此在500404401等情况下,该应用程序始终呈现默认的gsp错误视图,而不使用JSON视图。错误。

当我删除grails-gsp插件时,所有请求都将带有JSON响应。同样在出现错误的情况下。但是随后index.gsp无法呈现。

是否可以告诉grails应用程序默认情况下应使用JSON视图,以防万一索引应使用gsp视图?

更新: 我想直接从URLMapping渲染视图而不创建控制器。

1 个答案:

答案 0 :(得分:1)

  

是否可以告诉grails应用程序应使用JSON   视图默认情况下,以防万一,它应该使用gsp   查看?

是的。您可以从同一应用程序中提供许多不同的视图类型,包括GSON视图和其他GSP视图一起使用。

查看位于https://github.com/jeffbrown/webjsonviews的项目。

如果您运行该应用程序并使用浏览器向http://localhost:8080/person/index发送请求,您将看到HTML渲染的HTML,它是使用GSP在服务器端渲染的。

如果使用浏览器向http://localhost:8080/person/index.json发送请求,您将看到使用GSON视图呈现的JSON。

这将呈现HTML:

curl http://localhost:8080/person/index

这将呈现JSON:

curl http://localhost:8080/person/index.json

这将呈现JSON:

curl -H "Accept: application/json" http://localhost:8080/person/index

如果您希望默认内容类型为application/json,则可以将以下内容添加到PersonController

static responseFormats = ['json', 'html']

这将导致以下代码返回JSON而不是HTML:

curl http://localhost:8080/person/index

我希望有帮助。