2016-04-26 18 views
2

私はスプリングブート1.3.2を使用しており、REST Webサービスを公開する必要があります。このWebサービスには、パラメータとしてXMLデータを含むStringを渡す必要があります。文字列のサイズは通常2 MB〜120 MBです。問題は、RESTメソッドのパラメータに許容される最大サイズの設定方法がわからず、デフォルトのサイズが小さすぎることです。他の依存関係のため、Spring構成はJavaクラス内になければなりません。これは私の設定クラスです:スプリングブートレストサービスフォームが大きすぎます

@RequestMapping(method = RequestMethod.POST) 
public boolean processing(@RequestParam(value = "xml", required = true) String xml) 

そして私は、私は次のエラーを受け取るメソッドに文字列を送信する場合:

@Configuration 
@ComponentScan("eu.buzea") 
@EnableAutoConfiguration 
@EnableNeo4jRepositories("eu.buzea.datamodel.repositories") 
@EnableTransactionManagement 
@SpringBootApplication 
    public class Application extends Neo4jConfiguration { 

public Application() { 
    System.setProperty("username", <CONFIDENTIAL>); 
    System.setProperty("password", <CONFIDENTIAL>); 

} 

@Override 
public Neo4jServer neo4jServer() { 
    return new RemoteServer("http://localhost:7474"); 
} 

@Override 
public SessionFactory getSessionFactory() { 
    return new SessionFactory("eu.buzea.datamodel.entities"); 
} 

@Override 
@Bean 
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) 
public Session getSession() throws Exception { 
    return super.getSession(); 
} 

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 
} 

これは私のWebメソッドがどのように見えるかです

java.lang.IllegalStateException: Form too large: 780963 > 200000 
at org.eclipse.jetty.server.Request.extractFormParameters(Request.java:365) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.Request.extractContentParameters(Request.java:303) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.Request.extractParameters(Request.java:257) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.Request.getParameter(Request.java:826) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:70) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.Server.handle(Server.java:499) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) [jetty-io-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_71] 
2016-04-26 20:32:44 [qtp2021854618-21] WARN org.eclipse.jetty.http.HttpParser - badMessage: java.lang.IllegalStateException: too much data after closed for [email protected]{r=1,c=false,a=IDLE,uri=} 

最大フォームサイズを200MB(無限)に設定する方法は誰にも教えてください( 最大リクエストサイズ )。

UPDATE 次のポストは、それは春ブーツに埋め込まれていない、あなたは桟橋サーバーを使用している場合の解決策を提供します:stackoverflow.com/questions/3861455/form-too-large-exception

私はmaxFormContentSizeパラメータを設定したいが、私はないですEclipseパラメータかSpringパラメータかを確認してください。

P.S.私はMultipartFile Uploadを使ってこの問題を解決する方法を知っています。また、リクエスト本体に文字列/データを送信するという別のオプションもあります。彼らは両方とも素晴らしいですが、私はそれが可能かどうかを知りたいのですが、maxFormContentSizeをSpringまたはEclipseに入れます

答えて

2

春ブーツ1.4.0.M2は、これを構成するために使用できる新しいプロパティ、server.max-http-post-sizeを、持っているマルチパート形式であなたにデータを送信する必要があります。マイルストーンはhttps://repo.spring.io/libs-milestoneから入手できます。

あなたは春のブート1.3.xのに固執する場合は、アプリケーションの設定に、次のBeanを追加することにより、同じロジックを自分で実装することができます。

@Bean 
public EmbeddedServletContainerCustomizer jettyCustomizer() { 
    return new EmbeddedServletContainerCustomizer() { 

     @Override 
     public void customize(ConfigurableEmbeddedServletContainer container) { 
      if (container instanceof JettyEmbeddedServletContainerFactory) { 
       ((JettyEmbeddedServletContainerFactory) container) 
         .addServerCustomizers(new JettyServerCustomizer() { 

        @Override 
        public void customize(Server server) { 
         setHandlerMaxHttpPostSize(200 * 1024 * 1024, server.getHandlers()); 
        } 

        private void setHandlerMaxHttpPostSize(int maxHttpPostSize, 
          Handler... handlers) { 
         for (Handler handler : handlers) { 
          if (handler instanceof ContextHandler) { 
           ((ContextHandler) handler) 
             .setMaxFormContentSize(maxHttpPostSize); 
          } 
          else if (handler instanceof HandlerWrapper) { 
           setHandlerMaxHttpPostSize(maxHttpPostSize, 
             ((HandlerWrapper) handler).getHandler()); 
          } 
          else if (handler instanceof HandlerCollection) { 
           setHandlerMaxHttpPostSize(maxHttpPostSize, 
             ((HandlerCollection) handler).getHandlers()); 
          } 
         } 
        } 
       }); 
      } 
     } 
    }; 
} 
+0

これは私が探していた答えです!これを後で読んだ人のための助言と同じように:この量のデータをリクエストパラメータで送るのは馬鹿げた考えです!リクエスト本体を使いやすくする。 –

0

HTTP POST maxPostSizeを増やしましたか?あなたのapplication.propertiesファイルで

追加:

multipart.maxFileSize=20MB

ドキュメント:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/web/MultipartProperties.html

あなたはここのコードでそれをしたい場合は、ドキュメントです:

Increase HTTP Post maxPostSize in Spring Boot

+0

は、アプリケーションを追加します。このプロパティを持つプロパティファイルは、私のアプリケーションの何にも影響しませんでした。あなたが提案した2番目のオプションは、tomacatサーバー用です... –

1

大きなファイルを扱うときは、multipart-file-uploadを使用する必要があります。 Spring 3.0 MultipartFile upload

そして、クライアントは https://stackoverflow.com/a/27097798/5649869

+0

MultipartFileのアップロードを調べましたが、私のニーズに合うかもしれません。しかし、データを送信するJavaクライアントを作成することは簡単ではありません。あなたが提案した投稿は、私に必要なすべての情報を私に与えるものではありません。 'map.add(" file "、new ClassPathResource(file));'と 'template.get()'はあまりにも曖昧です。 –

関連する問題