在Spring MVC中映射Ajax请求:不允许获取错误405方法



进行ajax调用后,我收到错误405方法不允许。我正在使用Spring 3.0.1,Spring-web 3.0.1。

这是控制器映射

@Controller公共类 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!!");
    }
   });
});

从错误所表明的内容来看,这可能是您的问题:

@RequestMapping(value = "/ajaxaction", 方法 = RequestMethod.POST, 标头 ="内容类型=应用程序/json")

您可以使用 firebug 来检查请求标头。是否有"内容类型"的标题?

尝试使用 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!!");
  }
   });
});

使用 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)
嗨,我

遇到了同样的错误,我通过将我的 Ajax 调用从 get 更改为 post 来解决此问题,因为我在我的@RequestMapping注释中提到了方法 RequestMethod.POST 与您相同。

但我正在对该方法进行获取调用。 检查您的 AJAX 调用

为 RESTful Web 服务启用跨域请求,请从此处获取帮助

最新更新