zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring mvc处理http请求报错:java.lang.IllegalStateException: getInputStream() has already been called for this request详解编程语言

JAVASpring编程语言MVCHTTP 详解 处理 报错
2023-06-13 09:20:23 时间
java.lang.IllegalStateException: getInputStream() has already been called for this request 

 at org.apache.catalina.connector.Request.getReader(Request.java:1212) 

 at org.apache.catalina.connector.RequestFacade.getReader(RequestFacade.java:504) 

 at org.ms.selection.controller.ServiceController.invoke(ServiceController.java:44) 

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

 at java.lang.reflect.Method.invoke(Method.java:498) 

 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 

 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 

 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) 

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) 

 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 

 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) 

 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) 

 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 

 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) 

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) 

 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 

 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 

 at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71) 

 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.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 

 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 

 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 

 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 

 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 

 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 

 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 

 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 

 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) 

 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 

 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) 

 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 

 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) 

四月 26, 2017 6:27:40 下午 org.apache.catalina.core.StandardWrapperValve invoke 

严重: Servlet.service() for servlet [service-dispatcher] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: getInputStream() has already been called for this request] with root cause 

java.lang.IllegalStateException: getInputStream() has already been called for this request 

 at org.apache.catalina.connector.Request.getReader(Request.java:1212) 

 at org.apache.catalina.connector.RequestFacade.getReader(RequestFacade.java:504) 

 at cn.migu.wheat.service.ServiceProvider.buildParamter(ServiceProvider.java:129) 

 at cn.migu.wheat.service.ServiceProvider.servletInvoke(ServiceProvider.java:169) 

 at org.ms.selection.controller.ServiceController.invoke(ServiceController.java:53) 

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

 at java.lang.reflect.Method.invoke(Method.java:498) 

 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 

 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 

 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) 

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) 

 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 

 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) 

 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) 

 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 

 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) 

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) 

 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 

 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 

 at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71) 

 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.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 

 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 

 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 

 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 

 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 

 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 

 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 

 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 

 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) 

 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 

 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) 

 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 

 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)

从报错信息看是调用了两次ServletRequest的getInputStream(),但实际上getInputStream()和getReader()只能调用一次,第二次无论是再调哪个都报错。代码跟debug调试,发现是入参json转换时调用ServletRequest的子类HttpServletRequest的getReader()时报错了:

JsonFormat.parser().merge(request.getReader(), builder);

那么前面肯定有地方调用了getInputStream(),找了半天发现是spring [email protected]

@RequestMapping(value = "/{service}/{method}", method = { RequestMethod.GET, RequestMethod.POST }) 

 public @ResponseBody void invoke(@PathVariable("service") String service, @PathVariable("method") String method, 

 HttpServletRequest request, HttpServletResponse response, @RequestBody String data) 

[email protected],具体spring源码没找到,有知道的同学请指教一下。这里读流一次后,就无法再次读流了。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7830.html

cjava