Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧靴支撑维修表单过大_Java_Spring_Rest_Spring Boot_Jetty - Fatal编程技术网

Java 弹簧靴支撑维修表单过大

Java 弹簧靴支撑维修表单过大,java,spring,rest,spring-boot,jetty,Java,Spring,Rest,Spring Boot,Jetty,我正在使用SpringBoot1.3.2,我需要公开一个RESTWeb服务。我需要向这个web服务传递一个字符串(包含xml数据)作为参数。字符串的大小通常在2MB到120MB之间。问题是我不知道如何配置REST方法参数允许的最大大小,默认大小太小。由于其他依赖关系,Spring配置必须在java类中。这是我的配置类: @Configuration @ComponentScan("eu.buzea") @EnableAutoConfiguration @EnableNeo4j

我正在使用SpringBoot1.3.2,我需要公开一个RESTWeb服务。我需要向这个web服务传递一个字符串(包含xml数据)作为参数。字符串的大小通常在2MB到120MB之间。问题是我不知道如何配置REST方法参数允许的最大大小,默认大小太小。由于其他依赖关系,Spring配置必须在java类中。这是我的配置类:

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

    public Application() {
    }
    
    @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);
    }
}
这就是Rest端点的外观:

@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或无限大? 更新 以下文章给出了一个解决方案,以防您使用的是未嵌入Spring Boot的jetty服务器:

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


另外,我现在知道如何使用多部分文件上传来解决这个问题。此外,还有另一个选项:在请求正文中发送字符串/数据。它们都工作得很好,但我想知道是否可以在Spring或Eclipse中设置maxFormContentSize

您是否尝试过增加HTTP POST maxPostSize

应用程序.properties
文件中添加:

multipart.maxFileSize=20MB

文件:

如果您需要代码,请参阅以下文档:


处理大型文件时,应使用多部分文件上载。

客户端应该以多部分格式向您发送数据

Spring Boot 1.4.0.M2有一个新属性,
server.max http post size
,可用于配置此属性。里程碑可从中获取

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

对于简单的jetty-server-9.4.33.v20201020,无弹簧引导。它通过配置此系统属性来工作。jetty使用
Integer.getInteger
函数在
org.eclipse.jetty.server.handler.ContextHandler
中获取静态字段
\u maxFormContentSize
的默认值

public static void main(String[] args) {
    System.setProperty("org.eclipse.jetty.server.Request.maxFormContentSize", "20000000");   
    SpringApplication.run(Application.class, args);
}
对于
spring-boot-2.3.5
只有几个值被覆盖,如
org.springframework.boot.autoconfigure.web.ServerProperties.Jetty.maxHttpFormPostSize
,这些值可以配置为

server.jetty.maxHttpFormPostSize=20000001B

使用此属性添加application.properties文件不会影响我的应用程序中的任何内容。您建议的第二个选项是Tomcat服务器…我已经研究了多部分文件上传,它可能适合我的需要。然而,创建一个java客户机来发送数据并不是那么简单。你建议的帖子没有给我所需要的全部信息
map.add(“文件”,新类路径资源(文件))
template.get()
太模糊了。这就是我一直在寻找的答案!正如给后来阅读本文的人的建议:在请求参数中发送这么多数据是愚蠢的想法!更好地使用请求主体。