2012-08-05 92 views
6

在Spring MVC(我與3.0.2工作),兩個HTTP方法總是(或主要是因爲在我看來)保留(即與適當的處理程序映射),這是GET and POST如何處理Spring MVC中的Ajax請求?

@RequestMapping(method=RequestMethod.GET) 
public String showForm(Map model) 
{ 
    //Usually retrieve data from the database when the page is loaded. 

    return "admin_side/Temp"; 
} 

上面的方法在GET請求時被調用。


@RequestMapping(method=RequestMethod.POST) 
public String onSubmit(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response) 
{ 
    //Perform some basic operations with the database like insert, update or delete when the form is submitted (by clicking a submit button or so). 

    return "admin_side/Temp"; 
} 

上述方法時的POST請求時被調用。假設Spring控制器被指定爲@RequestMapping(value="admin_side/Temp")註釋。


現在,如果我需要使用Ajax並且需要執行與前面的方法不同的功能,會發生什麼?我既不能處理與GET方法也不與POST方法的另一種方法,因爲有已被映射處理程序(包括HTTP方法,GET和POST保留分別處理showForm()onSubmit()方法)。

爲了演示起見,我用了method=RequestMethod.PUT方法使用Ajax

@RequestMapping(method=RequestMethod.PUT) 
public @ResponseBody String getStateList(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, HttpServletRequest request, HttpServletResponse response) 
{ 
    return "Message"; 
} 

和它的工作如預期,但我覺得它應該是最好的解決方案。如果你有這樣一個場景(實際上,它對我來說似乎很平常),你如何處理Spring MVC中的Ajax請求?我應該(總是)使用RequestMethod.PUT? (或什麼是春季適合於Ajax的最好的HTTP方法?)

有沒有一種方法來映射多個方法與在同一個控制器相同的HTTP方法(一個明顯的答案應該是沒有)?同樣,當您需要在Spring MVC中使用Ajax時,您使用了哪種方法?希望你遵循我的意思!對於我來說,我的英語很困難,因爲我的英語處於初始階段。

回答

1

有沒有這樣的事情對於AJAX最佳方法。

至於你應該使用什麼方法,這取決於建築風格。 REST範式及其最常見的實際解釋ROA(面向資源的架構)對HTTP方法的語義做出了某些假設。這是一種日益流行的方法,我認爲值得一讀。儘管充分利用REST的好處,但可能需要您重新考慮整個應用程序設計。如果您決定這樣做,請閱讀REST,ROA和JAX-RS(RESTful應用程序的Java標準)。它的實現可以與Spring集成。

或者,你可以堅持到GET和POST,作爲最廣泛支持的方法。至於Spring本身,合理的做法是提供一個單獨的bean(或者一組bean)來處理基於AJAX的API。如果保持URL不同,將不會有方法「衝突」。

+0

謝謝!使用其他網址完成。現在,我需要使用Ajax從Spring控制器中檢索數據(通常是'List ')。我現在不知道,但Spring MVC 3.0.2應該支持像JSON這樣的機制。你知道嗎?我的意思是,如果你在Spring MVC中使用了這些東西,你有鏈接嗎?您可能會拒絕我的請求,因爲這不是原來的問題。謝謝。 – Tiny 2012-08-05 20:01:15

+0

@Tiny這裏是一個使用Jackson庫的例子:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ – toniedzwiedz 2012-08-05 22:20:16

2

我認爲真正的問題是:

爲什麼要取決於它是如何被訪問相同的URL /法組合行動有什麼不同?

誰在乎你是否通過在前端發出AJAX請求來訪問它?如果調用的語義不同,則給它一個不同的URL。您可以直接在方法上而不是在類上指定URL模式,以避免需要從該類複製功能。

+0

謝謝!使用其他網址完成。現在,我需要使用Ajax從Spring控制器中檢索數據(通常是'List ')。我現在不知道,但Spring MVC 3.0.2應該支持像JSON這樣的機制。你知道嗎?我的意思是,如果你在Spring MVC中使用了這些東西,你有鏈接嗎?您可能會拒絕我的請求,因爲這不是原來的問題。謝謝。 – Tiny 2012-08-05 20:00:46

2

我們可以有多個GET和單個控制器POST方法,我們需要使用value屬性用於此目的

例:

@RequestMapping(method=RequestMethod.GET, value = "/showForm") 
public ModelAndView showForm(){ 
} 

@RequestMapping(method=RequestMethod.GET, value = "/processAjaxRequest") 
public ModelAndView processAjax(){ 

ModelAndView modelAndView = new ModelAndView("page.jsp"); 
modelAndView.addObject("ajax_response", ajax_response); 
    return modelAndView; 
} 
+0

感謝您的回答。 – Tiny 2012-08-08 00:00:50