我想我比任何特定的编码解决方案更多的建议。这里的情景: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本身就是这样。 –