2012-12-12 98 views
2

在進行ajax調用之後,我得到了不允許的錯誤405方法。我正在使用Spring 3.0.1,Spring-web 3.0.1。在Spring MVC中映射Ajax請求:獲取錯誤405方法不允許

這裏是控制器映射

@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("[email protected]"); 
    e1.setTelephone("1111111111"); 
    e1.setReturnMessage("Message one!!"); 
    Employee e2 = new Employee(); 
    e1.setFirstName("Ajay"); 
    e1.setLastName("Singh"); 
    e1.setEmail("[email protected]"); 
    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!!"); 
    } 
    }); 

}); 

回答

0

從錯誤中講述什麼,這可能是你的問題:

@RequestMapping(值= 「/ ajaxaction」, 方法= RequestMethod.POST, 標題= 「內容類型=應用程序/ JSON」 )

您可以使用firebug來檢查請求標題。是否有「內容類型」的標題?

0

嘗試在ajax選項中使用 contentType: 'application/json'設置請求內容類型。

$('#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!!"); 
    } 
    }); 

}); 
0

當使用來自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) 
+0

我修改請求映射 @RequestMapping(值= 「/ ajaxaction」, 方法= RequestMethod.POST, \t \t headers = {「Accept = application/json」,「Content-Type = application/json」}) 但它仍然存在相同的問題。設置「Accept = application/json」有幫助,但僅用於接受由XMLHTTPREQUEST發佈的JSON數據。 –

+0

將標題更改爲標題=「Accept:*/*」 –

+0

將標題設爲標題=「Accept:*/*」後。我收到錯誤415不支持的媒體類型。 –

0

您好我得到了同樣的錯誤,我解決了這個問題,通過改變我的Ajax調用從得到職位,因爲我提到的方法與我的@RequestMapping註釋中的RequestMethod.POST一樣。

但我正在調用該方法。檢查你的Ajax調用

0

啓用RESTful Web服務跨源請求,以幫助從here

相關問題