我有其他控制器返回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()
答案 0 :(得分:2)
在HttpServletResponse上,您只能使用getWriter()或getOutputStream()中的一个,如文档中所示。你得到的例外是告诉你getOutputStream()已被调用,因此你不能调用getWriter()。
答案 1 :(得分:2)
在响应中添加“end-start”时间不是正确的地方。因为你实际上可能最终打破了你要发回的JSON响应。
您需要做的是 -
选项1 - 添加回复标头。像这样的东西
httpServletResponse.addHeader("total-time", "100ms");
这样您就拥有了数据而无需修改响应。你可以在Firebug中看到标题。
选项2 - 在日志文件中添加上述信息,这样您就不必更改servlet响应。