【Exception】java.lang.IllegalStateException: getWriter() has already been called for this response

案發現場

2019-07-13 01:50:37.835 [ERROR][http-nio-8080-exec-3]:o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] [log:175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: getWriter() has already been called for this response] with root cause
java.lang.IllegalStateException: getWriter() has already been called for this response
	at org.apache.catalina.connector.Response.getOutputStream(Response.java:548)
	at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:210)
	at org.springframework.http.server.ServletServerHttpResponse.getBody(ServletServerHttpResponse.java:83)
protected boolean sendChallenge(ServletResponse response, int code, String msg) {
        HttpServletResponse httpResponse = WebUtils.toHttp(response);
        httpResponse.setContentType("application/json;charset=UTF-8");
        try (
            PrintWriter printWriter = httpResponse.getWriter()
        ) {
            msg = StringUtils.isEmpty(msg) ? "" : msg;
            RestResponse restResponse = RestResponse.builder()
                                                    .code(code)
                                                    .msg(msg)
                                                    .build();
            printWriter.write(restResponse.toString());
        } catch (IOException e) {
            log.error("sendChallenge error,can not resolve httpServletResponse");
        }
        return false;
    }

解決方案

在調用用httpResponsegetWriter()會時報錯 getWriter() has already been called for this response

採用getOutputStream()代替getWriter()這樣就可以避免這個問題

備註:這個問題不是常有,有的spring boot版本有這個問題,這樣可以用getOutputStream()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章