Зачем играть в фреймворк просто киньте новый рендер в класс контроллера - PullRequest
4 голосов
/ 14 декабря 2011

Сейчас я использую play, вот код в controller.class, я не понимаю:

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

есть ли какая-то важная причина, заставляющая игровую среду просто бросать новый объект Render? Кажется, для использования «throw» без исключений.

Ответы [ 2 ]

7 голосов
/ 14 декабря 2011

Play использует исключения для управления потоком - вместо того, чтобы ваши методы возвращали что-то похожее на модель, все они генерируют исключения.Это непроверенные исключения (например, NullPointerException и т. Д.), Означающие, что вам не нужно выражение throws для сигнатуры вашего метода.

Многие люди боятся того, что Play создает такие исключения, ноэто на самом деле очень быстро.Это по двум причинам

  1. Выдача исключений Java намного быстрее, чем это было
  2. , если вы посмотрите на родительский класс (классы) RenderJson, вы увидите, чтометод с именем fillInStackTrace() (по крайней мере, я так думаю) был переопределен, чтобы ничего не делать - создание подробной трассировки стека, которую вы получаете, когда что-то идет не так, занимает много времени, но обычно это нормально, потому что исключения обычно не являютсябросили все время.При использовании Play для управления потоком необходимо было удалить часть кода, генерирующую трассировку стека.
3 голосов
/ 24 января 2012

Похоже, что Play 2.0 больше не использует исключения для потока управления: https://github.com/playframework/Play20/wiki/JavaControllers

...