복붙노트

[SPRING] 스프링 부트 레스트 서비스 양식이 너무 큼

SPRING

스프링 부트 레스트 서비스 양식이 너무 큼

Spring Boot 1.3.2를 사용하고 있으며 REST 웹 서비스를 노출해야합니다. 이 웹 서비스에 매개 변수로 String (XML 데이터 포함)을 전달해야합니다. 문자열의 크기는 일반적으로 2MB에서 120MB 사이입니다. 문제는 REST 메서드 매개 변수에 허용되는 최대 크기를 구성하는 방법을 알지 못하고 기본 크기가 너무 작기 때문입니다. 스프링 구성은 다른 종속성으로 인해 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=}

누구든지 200MB 또는 무한대로 (최대 요청 크기) 최대 양식 콘텐츠 크기를 설정하는 방법을 말해 줄 수 있습니까?

최신 정보 다음 게시물은 Spring Boot에 포함되어 있지 않은 부티 (Jetty) 서버를 사용하고있는 경우를 대비 한 해결책을 제시합니다 : stackoverflow.com/questions/3861455/form-too-large-exception

maxFormContentSize 매개 변수를 설정하려고하지만 Eclipse 매개 변수 또는 Spring 매개 변수인지 확실하지 않습니다.

추신 이제 MultipartFile 업로드를 사용하여 문제를 해결하는 방법을 알고 있습니다. 또한 요청 본문에 문자열 / 데이터를 보내는 또 다른 옵션이 있습니다. 그들은 모두 잘 작동하지만 Spring이나 Eclipse에서 maxFormContentSize를 설정할 수 있는지 알고 싶다.

해결법

  1. ==============================

    1.Spring 부트 1.4.0.M2에는이를 구성하는 데 사용할 수있는 server.max-http-post-size라는 새 등록 정보가 있습니다. 마일스톤은 https://repo.spring.io/libs-milestone에서 구할 수 있습니다.

    Spring 부트 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());
                                }
                            }
                        }
                    });
                }
            }
        };
    }
    
  2. ==============================

    2.대용량 파일을 처리 할 때는 multipart-file-upload를 사용해야합니다. Spring 3.0 MultipartFile 업로드

    대용량 파일을 처리 할 때는 multipart-file-upload를 사용해야합니다. Spring 3.0 MultipartFile 업로드

    그리고 클라이언트는 멀티 파트 형식으로 데이터를 보내야합니다. https://stackoverflow.com/a/27097798/5649869

  3. ==============================

    3.HTTP POST maxPostSize를 늘려 보셨습니까?

    HTTP POST maxPostSize를 늘려 보셨습니까?

    application.properties 파일에 다음을 추가하십시오.

    multipart.maxFileSize = 20MB

    선적 서류 비치:

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

    여기에 코드로 원한다면 문서가 있습니다 :

    봄 부팅시 HTTP POST maxPostSize 증가

  4. from https://stackoverflow.com/questions/36872540/spring-boot-rest-service-form-too-large by cc-by-sa and MIT license