我使用 jquery 发出一个 ajax 请求,这会调用以下 spring Controller :
@RequestMapping(value = "/dialogController", method = RequestMethod.POST)
public String dialogController(Model model, @RequestBody MyClass myclass) {
myClass.setTitle("SUCCESS");
model.addAttribute("myClass",myClass);
return "dialogContent"; //this resolves to dialogContent.jsp
}
但是我收到以下错误:
org.springframework.web.HttpRequestMethodNotSupportedException:
Request method 'POST' not supported
如果需要,这里是我使用 jQuery 进行的 ajax 调用:
jq.postJSON("/dialogController", myClass, function(data) {
myDialog.html(data);
myDialog.dialog('open');
//dialog settings previously assigned,
//but the success callback function is not reached anyway
});
编辑 如果我使用,我会得到同样的错误:
jq.ajax({
type: 'POST',
url: "/dialogController",
data:myClass,
success: function(data) {
previewDialog.html(data);
previewDialog.dialog('open');
});
最佳答案
对于国内的观众... 我发现问题是由于 Controller 中定义的方法签名与ajax调用不匹配。我从 Controller 方法中删除了 Model model
参数。然后我也意识到我还必须返回一个新模型和 View ;这是工作代码:
var myJSON = {"title":"help"};
myJSON = JSON.stringify(myJSON);
<c:url var="postAndView" value="/PostJSONMAV" />
...
jQuery.ajax({
type: 'POST',
url: "${postAndView}",
data:myJSON,
contentType: "application/json",
success: function(data) {
previewDialog.html(data);
previewDialog.dialog('open');
}
});
我更改为 ajax 调用,但 jQuery.postJSON()
可能也能正常工作。下面显示的是新的 Controller 代码,它正确地向模型添加了一个新对象并返回了在对话框中打开的 jsp 页面:
@RequestMapping(value = "/PostJSONMAV", method = RequestMethod.POST)
public ModelAndView postJSON(@RequestBody MyClass myClass) {
ModelAndView mav = new ModelAndView();
myClass.setTitle("SUCCESS");
mav.setViewName("dialogContent");
mav.addObject("myClass", myClass);
return mav;
}
关于java - 如何使用 ajax 请求从 spring Controller 返回 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028507/