2017-05-24 13 views
0

SpringBootプロジェクトでSpring MVCのを使用してREST Webサービスを構築する上で、この応答のために呼び出されている、例外は以下のようにeccured:ERROR:getWriterの()は、すでにspringmvc

2017-05-24 10:16:10.849 ERROR 10 --- [io-8080-exec-89] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet dispatcherServlet threw exception 
java.lang.IllegalStateException: getWriter() has already been called for this response 
    at org.apache.catalina.connector.Response.getOutputStream(Response.java:575) 
    at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:194) 
    at javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:100) 
    at org.springframework.http.server.ServletServerHttpResponse.getBody(ServletServerHttpResponse.java:89) 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:237) 
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100) 
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:232) 
    at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:198) 
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:130) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:726) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:592) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:526) 
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:389) 
    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254) 
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:349) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:175) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

しかし、よく休憩サービス機能、呼び出され、期待される結果を返すことができます。

@RequestMapping(value = "/kafka/picfile", method = RequestMethod.POST) 
public void uploadPicture(HttpServletResponse response) { 
    String result = ""; 
    response.reset(); 
    response.setCharacterEncoding("UTF-8"); 
    PrintWriter writer = null; 
    String prefix = "<!DOCTYPE html>\n" + 
      "<html lang=\"en\">\n" + 
      "<head>\n" + 
      "</head>\n" + 
      "<body>"; 
    String suffix = "</body>\n" + 
      "</html>"; 
    try { 
     writer = response.getWriter(); 
     Picture picture = new Picture("testname", "this is a test picture"); 
     result = kafkaService.send(picture); 
     if(!"success".equals(result)){ 
      result = "error[xxxxxxxxxxxxx]"; 
     } 
    } catch (Exception e) { 
     result = "error["+e.getMessage()+"]"; 
    } 
    result = prefix+"\n"+result+"\n"+suffix; 
    if(writer != null){ 
     writer.write(result); 
     writer.flush(); 
     writer.close(); 
    } 
} 

私は心配質問し、対応する答えの多くを見てきたが、それらのどれもが本当に私の問題に合っていない:ここで私は、メソッドgetWritter()を呼び出すコードブロックがあります。あなたのコメントを楽しみにしています。ありがとう!

答えて

0

スタックトレースHandlerMethodReturnValueHandlerCompositeに見ることができます。これは、何かがSpringの "handler"への応答を返すことを意味します。

次に、SpringはAbstractJackson2HttpMessageConverterを使用して戻り値を変換します。

この問題はこの方法ではないと思いますので、ここであなたのコントローラコードをすべて調べてください。

2

Response.reset()を追加します。応答を使用する前に。

例:

response.reset(); 
response.getOutPoutStream(); 
+1

あなたは説明を提供することを検討すべきです。また、コードをフォーマットしてみてください:[良い答えを書くにはどうすればいいですか?](https://stackoverflow.com/help/how-to-answer) –

関連する問題