2014-10-06 728 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的每个筛选器。

至少我的做法支持这种说法

相关问题