我想我比任何特定的編碼解決方案更多的建議。這裏的情景:REST,Spring MVC 3和PUT請求與AJAX
- 我在那裏一個新的用戶可以創建
這種形式是通過一個Spring控制器
@RequestMapping(value = "/secure/clients", method = RequestMethod.GET) public String prepareNewClient(final Principal principal, final ModelMap map) { map.addAttribute("client", new Client()); return "secure/clients"; }
形式提出通過GET請求訪問的形式,所有工作正常,我提交新客戶使用
$.ajax({})
提交會觸發一個POST請求使用相同的URL在我的控制檯上的以下方法[R
@RequestMapping(value = "/secure/clients", method = RequestMethod.POST) public @ResponseBody JsonResponse saveClient( @ModelAttribute("client") final Client client, final BindingResult result, final Principal principal, final ModelMap map) { // validate input // save client // prepare JsonResponse object return jsonResponse; }
完成後,我想保持用戶在同一屏幕上,並有形式觸發一個PUT而不是POST的。這很好,我可以通過jQuery實現,但只要我再次提交表單,客戶端就不再是ModelMap
了。
我甚至試圖將保存的客戶端添加到我的POST方法的ModelMap
,但即使這樣也行不通。
我不完全確定我是否以正確的方式做。說實話,我見過的每個教程都或多或少地使用了我在做的事情,但NONE其中有一個PUT請求 - 主要是處理對象的創建,我沒有問題。
我有想到的是,我可能需要有一個控制器的方法映射/secure/clients/{clientId}
與HTTP.GET
和另一個控制器的方法映射/secure/clients/{clientId}
與HTTP.PUT
。
但我不確定這是否合理,所以我有點失落。
- 我應該完全使用JSON調用創建我的控制器嗎?
- 在這種情況下,我應該重定向用戶並忘記AJAX調用嗎?
建議是非常感激。謝謝!
我認爲你仍然需要那個隱藏的領域。 – Mukus
不,不需要每次都放置額外的隱藏字段。 Spring本身就是這樣。 –