2011-08-11 64 views
2

我使用jQuery做Ajax請求,這要求翌年春季控制器:如何使用ajax請求從彈簧控制器返回視圖?

@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 

如果這裏需要的是Ajax調用我使用製作jQuery的:

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 
    }); 

編輯 我得到同樣的錯誤,如果我我們E:

jq.ajax({ 
    type: 'POST', 
    url: "/dialogController", 
    data:myClass, 
    success: function(data) {    
     previewDialog.html(data); 
     previewDialog.dialog('open'); 
    }); 
+0

是否正常工作,如果您使用的是其他客戶端張貼JSON數據?也是在dialogController中的一個錯誤?你還使用JavaScript庫嗎?如果是這樣的話? – Ali

+0

@Ali是的是一個拼寫錯誤。沒有嘗試一個休息客戶端,它會發揮作用,因爲彈簧控制器上發生錯誤?同樣的錯誤,如果我做類似的請求,但刪除json/myclass參數。 – NimChimpsky

+0

您是否嘗試在@RequestMapping註釋中添加Accept =「text/html,application/json」?我推薦RestClient的原因是因爲您可以看到傳入的「接受」值是什麼,您可以嘗試更改它以查看錯誤是否仍然存在。 – Ali

回答

2

在家裏的觀衆......我發現,這個問題是由於控制器不匹配Ajax調用定義的方法簽名。我從控制器方法中刪除Model model參數。然後我也意識到我也必須返回一個新的模型和視圖。這裏是工作代碼:

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()可能會藏漢工作。而下面顯示的是新的控制器代碼,這corrrectly增加了一個新的對象模型和返回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;  
} 
相關問題