我想我正在寻找比任何特定编码解决方案更多的建议。这是场景:
- 我有一个可以创建新用户的表单
通过 Spring 控制器通过 GET 请求访问此表单
@RequestMapping(value = "/secure/clients", method = RequestMethod.GET) public String prepareNewClient(final Principal principal, final ModelMap map) { map.addAttribute("client", new Client()); return "secure/clients"; }
提交了表单,一切正常,我使用
$.ajax({})
提交使用与我的控制器上的以下方法相同的 URL 触发 POST 请求
@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
不再存在了。
我什至尝试将保存的客户端添加到ModelMap
我的 POST 方法中,但即使这样也没有用。
我不完全确定我是否以正确的方式做这件事。老实说,我看到的每个教程都或多或少地使用了我正在做的事情,但没有一个教程有PUT 请求——主要是处理对象的创建,我没有问题。
我想到的是我可能需要一个控制器方法映射到/secure/clients/{clientId}
withHTTP.GET
和另一个控制器方法映射/secure/clients/{clientId}
到HTTP.PUT
.
但我不确定这是否有意义,所以我有点迷茫。
- 我应该完全在 JSON 调用上创建我的控制器吗?
- 在这种情况下,我应该重定向用户并忘记 AJAX 调用吗?
建议不胜感激。谢谢!