如何解决BadMessageException:400在spring应用程序中将java7迁移到java8时无法解析表单内容的问题?

如何解决BadMessageException:400在spring应用程序中将java7迁移到java8时无法解析表单内容的问题?,spring,google-app-engine,java-8,jetty,jetty-9,Spring,Google App Engine,Java 8,Jetty,Jetty 9,由于app engine不推荐使用java 7,我们已将应用程序迁移到java 8,但在迁移应用程序后,我们得到了org.eclipse.jetty.http.BadMessageException:400提交html表单后无法解析表单内容 有人能帮我解决这个问题吗 我们正在使用:Spring3.1.0和Java8 这是我的完整堆栈跟踪: 例外消息是: Request processing failed; nested exception is org.eclipse.jetty.http.Ba

由于app engine不推荐使用java 7,我们已将应用程序迁移到java 8,但在迁移应用程序后,我们得到了org.eclipse.jetty.http.BadMessageException:400提交html表单后无法解析表单内容

有人能帮我解决这个问题吗

我们正在使用:Spring3.1.0和Java8

这是我的完整堆栈跟踪:

例外消息是:

Request processing failed; nested exception is org.eclipse.jetty.http.BadMessageException: 400: Unable to parse form content
 Complete stacktrace is : org.springframework.web.util.NestedServletException: 
 Request processing failed; nested exception is org.eclipse.jetty.http.BadMessageException: 400: Unable to parse form content  at
 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)  at
 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)  at
 javax.servlet.http.HttpServlet.service(HttpServlet.java:707)  at
 javax.servlet.http.HttpServlet.service(HttpServlet.java:790)  at
 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848)  at
 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)  at
 com.gulfinfotech.eflow.filters.NameSpaceGoogleSecurityFilter.doFilter(NameSpaceGoogleSecurityFilter.java:207)  at
 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)  at
 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147)  at
 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  at
 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)  at
 com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)  at
 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)  at
 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)  at
 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)  at
 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)  at
 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)  at
 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)  at
 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)  at
 com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle(ParseBlobUploadHandler.java:119)  at
 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1182)  at
 com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:171)  at
 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)  at
 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)  at
 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)  at
 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)  at
 com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:296)  at
 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)  at
 org.eclipse.jetty.server.Server.handle(Server.java:539)  at
 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333)  at
 com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:202)  at
 com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)  at
 com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)  at
 com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:699)  at
 com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:661)  at
 com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:631)  at
 com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:825)  at
 com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:273)  at
 java.lang.Thread.run(Thread.java:745) Caused by: org.eclipse.jetty.http.BadMessageException: 400: Unable to parse form content  at
 org.eclipse.jetty.server.Request.getParameters(Request.java:372)  at
 org.eclipse.jetty.server.Request.getParameter(Request.java:1014)  at
 org.springframework.web.context.request.ServletWebRequest.getParameter(ServletWebRequest.java:117)  at
 org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.getRequestValueForAttribute(ServletModelAttributeMethodProcessor.java:98)  at
 org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:73)  at
 org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:102)  at
 org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:74)  at
 org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:155)  at
 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)  at
 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)  at
 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)  at
 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)  at
 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)  at
 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)  at
 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)  at
 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) ... 38 more
 Caused by: org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! byte 92 in state 0  at
 org.eclipse.jetty.util.Utf8Appendable.appendByte(Utf8Appendable.java:247)  at
 org.eclipse.jetty.util.Utf8Appendable.append(Utf8Appendable.java:157)  at
 org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:522)  at
 org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:572)  at
 org.eclipse.jetty.server.Request.extractFormParameters(Request.java:521)  at
 org.eclipse.jetty.server.Request.extractContentParameters(Request.java:453)  at
 org.eclipse.jetty.server.Request.getParameters(Request.java:368) ... 53 more
  • 要解决此问题,您需要在表单中设置接受charset=“UTF-8”标记 因为jetty使用UTF-8对请求进行解码

您是否尝试过使用Spring CharacterEncoding过滤器


使用setForceEncoding(true)

尝试在web.xml中设置多部分配置

<multipart-config>
    <location>/tmp</location>
    <max-file-size>20848820</max-file-size>
    <max-request-size>1073741824</max-request-size>
    <file-size-threshold>1048576</file-size-threshold>
</multipart-config>

我认为您可能需要将spring版本更新为4,因为spring 3是用java 7编译的。这是spring版本的问题吗?调试代码后,我发现表单的一些值没有正确解码:我在这个符号(')中发现错误。带有此符号的语句已由html处理器正确编码,但无法解码。注意:我们不做任何实用的编码和解码。这是由内部完成的。有人能建议如何解决这个问题吗?
    /**
     * multipart config
     */
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("1024MB");
        factory.setMaxRequestSize("1024MB");
        return factory.createMultipartConfig();
    }