简体   繁体   中英

How to solve BadMessageException : 400 Unable to parse form content issue while migrating java7 to java8 in spring application?

Because of java 7 deprecated by app-engine we have migrated our application to java 8 but after migrating the application we are getting org.eclipse.jetty.http.BadMessageException: 400 Unable to parse form content message after submitting the html form.

Can any one help me for the solution of this?

We are using : spring 3.1.0 and java 8

Here is my complete Stack-trace :

Exception Message is :

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
  • 要解决这个问题,您需要在表单标签中设置accept-charset="UTF-8"因为 jetty 使用UTF-8来解码请求。

Have you tried using the Spring CharacterEncodingFilter?

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/CharacterEncodingFilter.html

with setForceEncoding(true)

try to setup multipart-config in 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>

or add the following code if in spring boot

    /**
     * multipart config
     */
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("1024MB");
        factory.setMaxRequestSize("1024MB");
        return factory.createMultipartConfig();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM