Spark最近表现得很奇怪。我有一个按钮,当点击它时调用带有一些查询参数的POST方法:
post("/test", (request, response) -> {
model.put("reason", "some reason here");
...
LOG.info("Returning from /test with reason: " + model.get("reason"));
// the above line always executes and always prints the correct output (never 404)
return new ModelAndView(model, "test.vtl");
}, new VelocityTemplateEngine());
文件test.vtl
仅包含以下内容:$reason
(在下面的JS代码中用于显示reason
地图中model
键内容的提醒。
JS相关代码:
xmlHttp.open("POST", "/test", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var params = "file=" + file + "&searchStr=" + searchStr;
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == XMLHttpRequest.DONE) {
alert(xmlHttp.responseText);
}
}
xmlHttp.send(params);
当我点击它时,有时它会完美地工作,当我再次点击时,我得到一个404 Not Found with:
MatcherFilter:152 - 请求的路径[/ test]尚未映射到Spark
这发生在几秒钟内。我点击 - 它有效 - 如果失败我再次点击 - 再次失败 - 再次失败 - 再次突然成功......
怎么可能?
P.S。我已登录post
请求,因此我知道Spark实际上正在访问它。但它并没有从它返回。这可能与里面的 {/ 1>}突然提升404(我不会从中访问其他页面)有关。
答案 0 :(得分:0)
似乎有2个可能的答案(为什么他们解决的是另一个问题):
Thread.sleep(250); // or even lower
。GET
。我找不到这些任意失败的根本原因,但最终选择了#2选项。