如何在spring中添加到HttpServletResponse

时间:2011-07-20 01:39:35

标签: spring-mvc controller interceptor

我有其他控制器返回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 个答案:

答案 0 :(得分:2)

在HttpServletResponse上,您只能使用getWriter()getOutputStream()中的一个,如文档中所示。你得到的例外是告诉你getOutputStream()已被调用,因此你不能调用getWriter()。

答案 1 :(得分:2)

在响应中添加“end-start”时间不是正确的地方。因为你实际上可能最终打破了你要发回的JSON响应。

您需要做的是 -

选项1 - 添加回复标头。像这样的东西

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

这样您就拥有了数据而无需修改响应。你可以在Firebug中看到标题。

选项2 - 在日志文件中添加上述信息,这样您就不必更改servlet响应。