Spring-api 3.+ 以后引入了对异步请求处理的支持,所以我想用我最喜欢的 Akka 提供的并发模型把它放到示例 web 应用程序中
我的代码看起来像这样
@RequestMapping(value = Array("/"), method = Array(RequestMethod.GET))
@ResponseBody
def adminHome(request: HttpServletRequest) : DeferredResult[ModelAndView] = {
import ExecutionContext.Implicits.global
val result = new DeferredResult[ModelAndView]
........ code for some future .........
// creating model map future from some future
val modelMapFuture: Future[Map[String, Any]] = someFuture.flatMap(urlObjects =>
Future(
Map("urlList" -> urlObjects.asJava)
))
// setting the deferred result value upon completion of future
modelMapFuture.onComplete {
case Success(modelMap) => result.setResult(new ModelAndView("index", modelMap.asJava))
case Failure(e) => result.setResult(new ModelAndView("index"))
}
result
}
我已经启用了对 Spring mvc DispatcherServelet 的 aync 支持以及附加到特定 serverlet 的 url 映射的所有过滤器。
但结果我总是得到一个空页面。
我可以通过以下方式帮助您缩小问题范围 -
一个。模型/视图中没有例外
如果我将视图设置为带有 hello world 的简单 JSP,它也不会加载。
湾。请求映射工作正常
C。未来完成没有错误
d。延迟结果设置正确
我已将 DeferredResultProcessingInterceptorAdapter 实现绑定到 mvc:deferred-result-interceptors 并为 beforeConcurrentHandling、preProcess、postProcess 和 afterCompletion 放置日志我从拦截器获取以下日志
并发处理请求之前:延迟结果过期或设置为:false
预处理:延迟结果过期或设置为:假
后期处理:延迟结果过期或设置为:true
完成后:延迟结果过期或设置为:true
任何帮助都会受到高度评价,因为我整整两天都在为此苦苦挣扎。
更多细节
Spring 3.2.3 版-RELEASE Tomcat 7.0.42 版