如何通过json暴露play framework 1.2.7中的内部错误消息id?
Posted
技术标签:
【中文标题】如何通过json暴露play framework 1.2.7中的内部错误消息id?【英文标题】:How to expose the internal error message id in play framework 1.2.7 via json? 【发布时间】:2013-12-06 08:55:43 【问题描述】:播放框架 1.2.7 应用程序提供 javascript 前端。几乎两层之间的所有消息都作为 JSON 字符串进行交换。现在我需要将 500 个错误(可能还有其他错误)从 html 更改为 JSON。
我将 app/views/error.html 更改为
#if play.mode.name() == 'DEV'
"msg": "500 exception",
"verbose": "missing",
"type": "$exception?.class.name",
"message": "$exception?.message?.replace("\"", "\\\"")"
#/if
#else
"msg": "500 exception"
#/else
但这缺少内部异常 ID,这在检查日志时很有用:
09:49:54,419 ERROR ~
@6gfb83i26
Internal Server Error (500) for request GET /test/500
Execution exception (In /app/controllers/Application.java around line 332)
NullPointerException occured : null
为了调试目的,我需要更改 @6gfb83i26 出现在前端的消息中吗?另外,有没有办法重写 #500 exception / 来编写 JSON 而不是 HTML?
【问题讨论】:
【参考方案1】:最简单的方法是使用@Catch 拦截器。
这是一个包含此拦截器的示例控制器:
public class InternalErrorController extends Controller
@Catch
public static void handleExceptions(Throwable e)
if (e != null)
String result = " status: 500, msg: '" + e.getMessage() + "', errId: 1 ";
response.status = 500;
renderJSON(result);
之后,对于您要为其返回有关错误的 JSON 状态的每个控制器,您应该添加以下内容:
@With(InternalErrorController.class)
public class Application extends Controller
public static void index()
throw new RuntimeException("Test exception");
这应该可以解决您的问题。
【讨论】:
以上是关于如何通过json暴露play framework 1.2.7中的内部错误消息id?的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework 2.4.1:如何从 JsArray 中移除元素
Scala + Play Framework + Slick - Json 作为模型字段
Play Framework Secure Module:登录JSON响应接口