使用 Play Framework for Java,如何从控制器返回 500 响应?

Posted

技术标签:

【中文标题】使用 Play Framework for Java,如何从控制器返回 500 响应?【英文标题】:Using the Play Framework for Java, how do I return a 500 response from a controller? 【发布时间】:2020-10-29 17:04:51 【问题描述】:

我继承了一个 Play Framework v1.2 应用程序,它同时提供网站和 API。 API 控制器的现有错误处理策略使用renderJSON(error.message) 向我们的客户端返回错误,不幸的是创建了返回 200 的响应。

我想返回一个实际的状态码,4xx 或 5xx。问题是如果我使用error(message),会产生 500 响应,但 500.html 错误页面会启动并返回 HTML 而不是 JSON。我可以覆盖模板以呈现 JSON,但这会影响我们面向客户的网页。

我正在努力弄清楚如何仅为我们的 API 控制器手动设置响应状态代码,以及呈现 JSON 文档。

我对框架还很陌生,并且一直在查看文档,但对于 1.2 版,我没有看到很多选项。

【问题讨论】:

【参考方案1】:

我不确定这是否是最佳解决方案,但它似乎是最直接的,无需处理将网站项目与 API 项目混合的更大问题。

我在这里找到了 Play Framework 1.2 版的源代码,https://github.com/playframework/play1/tree/1.2.x。

我能够找到Response 的定义并发现状态只是类中的一个字段。所以这正如我所希望的那样工作:

renderJSON(" 'status' : 'error' ");
response.status = Http.StatusCode.INTERNAL_ERROR;

【讨论】:

以上是关于使用 Play Framework for Java,如何从控制器返回 500 响应?的主要内容,如果未能解决你的问题,请参考以下文章

游戏中的数据验证 Framework-java 2.4

play-framework的安装与使用

Play Framework:如何不查看文件夹以了解 Play Framework 中的更改

Play Framework - 是不是可以在 Play 中结合使用 Promise 和 WebSocket?

使用 play framework 1.+ 指定图像名称(使用 play.db.jpa.blob)

Play Framework Java - 包 play.db 不存在