gpt4 book ai didi

spring-mvc - 带有ajax请求的Spring延迟结果

转载 作者:行者123 更新时间:2023-12-04 01:21:10 26 4
gpt4 key购买 nike

我正在使用 spring deferredresult(servlet 3 async) 进行 ajax 请求处理。但是在返回 deferredresult 之后,我没有在 ajax 请求成功方法中获得响应对象。有人知道这是什么原因吗?我在配置中遗漏了什么吗?

以下是ajax调用代码:

function sendajaxreq() {
$
.ajax({
url : "plantView/testLink",
type : "GET",
data : "",
cache : false,
success : function(messages) {
alert(messages);
},
error : function(xhr) {
if (xhr.statusText != "abort" && xhr.status != 503) {
console
.error("Unable to retrieve chat messages. Chat ended.");
}
}
})
}

Controller 代码:
@RequestMapping(value = "/testLink", method = RequestMethod.GET)
@ResponseBody
public DeferredResult<Map<String, WebView>> testLink() {

DeferredResult<Map<String, WebView>> chartsResult = new DeferredResult<Map<String, WebView>>();

Map<String, WebView> res = processSampleReq();
chartsResult.setResult(res);
chartsResult.onCompletion(new Runnable() {
@Override
public void run() {
System.out.println("deffered res completed");
}
});

return chartsResult;
}

即使在返回 chartsResult 之后,我在 ajaxcall 成功方法中也将消息设为 null。

在 web.xml 中,我为延迟结果所做的唯一更改是为调度程序 servlet 和文件管理器映射添加了异步支持。

我使用的是 Spring 3.2.0.RELEASE 版本和 Tomcat 7.0.34。

谢谢,
迪普蒂。

最佳答案

DeferredResult 旨在由 Controller 返回 没有 调用 setResult()在同一个线程中。 setResult()必须由另一个线程调用。见 Introducing Servlet 3 Async Support (SpringSource 团队博客)。但这与 IMO 与您的空消息无关。

如果您想生产JSON with @ResponseBody你必须确保 spring 在类路径中找到 jackson :

Underneath the covers, Spring MVC delegates to a HttpMessageConverter to perform the serialization. In this case, Spring MVC invokes a MappingJacksonHttpMessageConverter built on the Jackson JSON processor. This implementation is enabled automatically when you use the mvc:annotation-driven configuration element with Jackson present in your classpath.

关于spring-mvc - 带有ajax请求的Spring延迟结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com