2014-10-06 113 views
5

我的Spring Boot配置有問題。我得到了它應使用插座一些移動設備的異常:Spring Boot啓用<async-supported> like web.xml

java.lang.IllegalArgumentException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml. Also you must use a Servlet 3.0+ container 
    at org.springframework.util.Assert.isTrue(Assert.java:65) 
    at org.springframework.http.server.ServletServerHttpAsyncRequestControl.<init>(ServletServerHttpAsyncRequestControl.java:59) 
    at org.springframework.http.server.ServletServerHttpRequest.getAsyncRequestControl(ServletServerHttpRequest.java:202) 
    at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.handleInitialRequest(AbstractHttpSockJsSession.java:202) 
    at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequestInternal(AbstractHttpSendingTransportHandler.java:66) 
    at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequest(AbstractHttpSendingTransportHandler.java:58) 
    at org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService.handleTransportRequest(TransportHandlingSockJsService.java:254) 
    at org.springframework.web.socket.sockjs.support.AbstractSockJsService.handleRequest(AbstractSockJsService.java:322) 
    at org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler.handleRequest(SockJsHttpRequestHandler.java:88) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    ... 

當我從異常看,我有加入真正到web.xml文件中啓用異步處理。但是這是問題,因爲我沒有它 - 我們的項目使用Spring Boot。

有什麼辦法可以像Spring一樣提供相同的功能嗎?

回答

13

你只需要定義dispatcherServlet@Bean

@Bean 
public ServletRegistrationBean dispatcherServlet() { 
    ServletRegistrationBean registration = new ServletRegistrationBean(
      new DispatcherServlet(), "/"); 
    registration.setAsyncSupported(true); 
    return registration; 
} 

它將覆蓋默認一個從DispatcherServletAutoConfiguration

1

也許值得一提的是,Spring引導具有github默認情況下,調度員的servlet和所有過濾器

報價啓用異步支持:

我們會自動設置異步支持爲true 因爲DispatcherServlet知道如何處理這樣的請求,並且它基本上取決於各個控制器方法來返回 像DeferredResult。此外,我們還設置了異步支持 任何篩選器(通過getServletFilters提供),並將 DispatcherType設置爲包含ASYNC的每個篩選器。

至少我的做法支持這種說法

相關問題