这个错误导致接口返回值得时候出现问题,返回错误,接口崩溃。

原因倒是很简单…

一、问题场景

在写spring mvc的拦截器。

看到public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)的HttpServletResponse response就想输出点什么东西,于是就这样写:

直接按照servlet的老一套,

把string类型的”godlikexie”直接放进printwriter的输出流中。

结果就报错getWriter() has already been called for this response了。

二、尝试解决

我本来已经实现了拦截器功能了,但是没有尝试输出什么,所以感觉是输出部分有问题咯。

所以我认为是PrintWriter writer = response.getWriter()有问题。

查了一下之后发现,getWriter和getOutputStream二者只能选其一,调用了其中一个就不能调用另一个,这个时候我感觉spring mvc的拦截器输出流可能是ServletOutputStream这种形式的,所以就写成了这样:

果然这个问题就解决了。

三、完整的代码

四、总结

学到了新姿势,getWriter和getOutputStream二者只能选其一,那就说明spring mvc的拦截器只能使用ServletOutputStream做输出流,而不能用PrintWriter。

发表评论

电子邮件地址不会被公开。 必填项已用*标注