【问题标题】:Mapping Ajax Request in Spring MVC: getting error 405 method not allowed在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法
【发布时间】: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!!");
    }
   });

});

【问题讨论】:

    标签: spring jquery spring-mvc


    【解决方案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 获取帮助

          【讨论】:

            猜你喜欢
            • 2018-08-19
            • 1970-01-01
            • 2020-03-19
            • 2018-02-28
            • 2018-09-08
            • 2017-11-03
            • 2019-03-25
            • 1970-01-01
            • 2016-03-19
            相关资源
            最近更新 更多