为什么play框架只是在控制器类中抛出一个新的Render

MrR*_*ROY 4 design-patterns exception try-catch playframework

我现在正在玩游戏,这里是controller.class中的一些代码,我不明白:

/**
 * Render a 200 OK application/json response
 * @param jsonString The JSON string
 */
protected static void renderJSON(String jsonString) {
    throw new RenderJson(jsonString);
}
Run Code Online (Sandbox Code Playgroud)

有没有什么重要的原因让play框架简单地抛出一个新的Render对象?似乎有线使用"抛出"而没有例外.

Ric*_*ich 7

Play使用Exceptions进行流控制 - 而不是返回类似Model的方法,它们都抛出Exceptions.它们是未经检查的异常(如NullPointerException等),这意味着您不需要throws方法签名上的子句.

很多人都害怕Play抛出这样的例外,但实际上速度非常快.这有两个原因

  1. Java异常抛出比它更快
  2. 如果你看看你的父类,RenderJson你会看到一个被调用的方法fillInStackTrace()(至少我认为它被称之为)已被覆盖而没有做任何事情 - 创建出现问题时得到的详细堆栈跟踪需要很多时候,但通常没关系,因为异常通常不会被抛出.使用Play进行流控制,有必要删除代码的堆栈跟踪生成部分.