在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法
Posted
技术标签:
【中文标题】在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法【英文标题】:Mapping Ajax Request in Spring MVC: getting error 405 method not allowed 【发布时间】:2012-11-29 23:30:58 【问题描述】:在进行 ajax 调用后,我收到错误 405 方法不允许。我正在使用 Spring 3.0.1,Spring-web 3.0.1。
这是控制器映射
@控制器 公共类 AjaxController
@RequestMapping(value = "/ajaxaction",
method = RequestMethod.POST,
headers ="content-type=application/json")
public @ResponseBody Collection<Employee> serveAjaxRequest(@RequestBody ReqParam reqParam)
List<Employee> empList = new ArrayList<Employee>();
System.out.println("Req obj:: " + reqParam.getA() + " " + reqParam.getB()
+ " " + reqParam.getC() + " " + reqParam.getD() + " " + reqParam.getE());
Employee e1 = new Employee();
e1.setFirstName("Vaibhav");
e1.setLastName("Raj");
e1.setEmail("vraj3@sapient.com");
e1.setTelephone("1111111111");
e1.setReturnMessage("Message one!!");
Employee e2 = new Employee();
e1.setFirstName("Ajay");
e1.setLastName("Singh");
e1.setEmail("asingh@gmail.com");
e1.setTelephone("2222222222");
e1.setReturnMessage("Message two!!");
empList.add(e1);
empList.add(e2);
return empList;
)
以及ajax调用的Jquery代码:
函数:submitAjax()
$('#g').bind('click', function(evt)
alert($('form').serialize());
formData = $('form').serialize();
$.ajax(
url: "/ajaxaction.html",
type: 'POST',
dataType: 'json',
data: formData,
success: function(data)
alert(data);
,
error: function()
alert("Error!!");
);
);
【问题讨论】:
【参考方案1】:根据错误信息,这可能是您的问题:
@RequestMapping(value = "/ajaxaction", 方法 = RequestMethod.POST, 标头="content-type=application/json")
您可以使用 firebug 来检查请求标头。是否有“内容类型”的标题?
【讨论】:
【参考方案2】:尝试使用设置请求内容类型
contentType: 'application/json'
在 ajax 选项中。
$('#g').bind('click', function(evt)
alert($('form').serialize());
formData = $('form').serialize();
$.ajax(
url: "/ajaxaction.html",
type: 'POST',
dataType: 'json',
data: formData,
contentType: 'application/json',
success: function(data)
alert(data);
,
error: function()
alert("Error!!");
);
);
【讨论】:
【参考方案3】:当使用来自 Spring 控制器的 JSON 响应时,您需要定义 Accept 标头。默认情况下,Spring 将 Accept 标头定义为 html。 添加标题:
headers = "Accept=application/json"
修改你的方法注释并改变它:
@RequestMapping(value = "/ajaxaction",
method = RequestMethod.POST,
headers ="Accept:*/*")
public @ResponseBody Collection<Employee> serveAjaxRequest(@RequestBody ReqParam reqParam)
【讨论】:
我修改了请求映射@RequestMapping(value = "/ajaxaction", method = RequestMethod.POST, headers ="Accept=application/json", "Content-Type=application/json" ) 但它仍然有同样的问题。设置“Accept=application/json”有帮助,但仅用于接受 XMLHTTPREQUEST 发布的 JSON 数据。 将标头更改为标头="Accept:*/*" 在将标头制作为标头 ="Accept:*/*" 之后。我收到错误 415 不支持的媒体类型。 能发一下spring-servlet.xml的内容吗? 你想确认这个的存在吗? 【参考方案4】:您好,我遇到了同样的错误,我通过将 Ajax 调用从 get 更改为 post 来解决此问题,因为我在 @RequestMapping 注释中提到的方法为 RequestMethod.POST 与您相同。
但我正在调用该方法。检查你的 ajax 调用
【讨论】:
【参考方案5】:为 RESTful Web 服务启用跨源请求,从 here 获取帮助
【讨论】:
以上是关于在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 将“映射”对象传递给 Spring MVC 控制器