Как добавить в HttpServletResponse весной - PullRequest
0 голосов
/ 20 июля 2011

У меня есть остальные контроллеры, которые возвращают ответ Json.Я добавил перехватчик, который добавит некоторый элемент в ответ, как показано ниже.

@Override
public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final ModelAndView modelAndView) throws Exception {
    final long end = System.currentTimeMillis();
    final long start = (Long) request.getAttribute("_start_time");
    // how do I append to response by the difference of end - start?
    super.postHandle(request, response, handler, modelAndView);
}

Если я просто добавлю что-нибудь к ответу, я получу следующее исключение:

Произошло исключение java.lang.IllegalStateException: getOutputStream () уже был вызван для этого ответа

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Добавление времени «конца-начала» к ответу - неправильное место.В действительности вы можете нарушить ответ JSON, который вы отправляете обратно.

Что вам нужно сделать, это -

Вариант 1 - Добавить заголовок ответа.Примерно так:

httpServletResponse.addHeader("total-time", "100ms");

Таким образом, у вас есть данные, и вам не нужно изменять ответ.Вы можете увидеть заголовок в Firebug.

Вариант 2 - Добавьте приведенную выше информацию в файл журнала, чтобы вам не пришлось изменять ответ сервлета.

2 голосов
/ 20 июля 2011

На HttpServletResponse вы можете использовать только один из getWriter () или getOutputStream () , как указано в документации. Исключение, которое вы получаете, говорит вам, что getOutputStream () уже был вызван, поэтому вам не разрешено вызывать getWriter ().

...