Spring Boot Rest服务表单太大

我正在使用Spring Boot" title="Spring Boot">Spring Boot 1.3.2,需要公开REST

Web服务。对于此Web服务,我需要传递一个String(包含xml数据)作为参数。字符串的大小通常在2 MB到120

MB之间。问题是我不知道如何配置REST方法参数允许的最大大小,并且默认大小太小。由于其他依赖性,Spring配置必须在Java类中。这是我的配置类:

@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);

}

}

这是我的网络方法的样子:

@RequestMapping(method = RequestMethod.POST)

public boolean processing(@RequestParam(value = "xml", required = true) String xml)

当我向该方法发送字符串时,出现以下错误:

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 HttpChannelOverHttp@4d208ff0{r=1,c=false,a=IDLE,uri=}

谁能告诉我如何将最大表单内容大小( 最大请求大小 )设置为200 MB或无限?

我想设置 maxFormContentSize 参数,但是不确定是Eclipse参数还是Spring参数。

PS我现在知道如何使用MultipartFile Upload解决问题。另外,还有另一个选择:在请求正文中发送字符串/数据。它们都很 好用

,但是我想知道是否可以在Spring或Eclipse中设置 maxFormContentSize

回答:

Spring Boot 1.4.0.M2具有一个新属性,server.max-http-post-

size可用于配置此属性。里程碑可从https://repo.spring.io/libs-

milestone获得。

如果您想坚持使用Spring Boot 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());

}

}

}

});

}

}

};

}

以上是 Spring Boot Rest服务表单太大 的全部内容, 来源链接: utcz.com/qa/418699.html

回到顶部