原文连接:http://www.javaspecialists.eu/archive/Issue129.htmlhtml
今天看到play的客户端渲染方法很特别: java
/** * Render a 200 OK application/json response * @param jsonString The JSON string */ protected static void renderJSON(String jsonString) { throw new RenderJson(jsonString); }
怎么渲染是直接抛出一个异常呢?spring
查了一下才发现原来是用的服务器端直接抛出“实体异常”(这种可能不能叫一场了),由客户端渲染器进行捕获再进行渲染(这种形式不知道比spring的渲染器效率是否高一点)。json
这种思路好像颇有意思,因为正常的异常要填充stack trace,因此手动写了一个FastRuntimeException把填充方法fillInStackTrace给覆写了。服务器
同时,我也在stackoverflow上请教了一下:http://stackoverflow.com/questions/8500739/why-play-framework-simply-throw-a-new-render-in-controller-classapp
有兴趣的能够深刻研究一下。spa