在普通的Play应用程序中,我有以下情形。Play Framework:表单验证失败后不要更改URL
路由文件看起来像这样:
GET /accounts/add controllers.Accounts.add()
POST /accounts controllers.Accounts.create()
第一条路线导致视图,我可以添加一个新的帐户。提交新账户的形式看起来是这样的:
@helper.form(action = routes.Accounts.create()) {...}
现在控制器结合输入到表格和检查任何验证错误:
public static Result create() {
Form<Account> form = Form.form(Account.class).bindFromRequest();
if (form.hasErrors()) {
return badRequest(views.html.account.add.render(form));
}
...
}
现在的问题是,客户端会看到与一些额外的错误消息相同的看法。但是,与此同时,URL已从http://example.com/accounts/add更改为http://example.com/accounts。
如果客户端现在重新载入浏览器,则会调用GET http://example.com/accounts(在此场景中甚至没有映射 - 因此得到404 - 未找到)。
也许这只是我,但我觉得这种讨厌和浏览一些GitHub项目,我找不到一个好的解决方案,这种情况。
POST /accounts/add controllers.Accounts.create()
...在这种情况下,一切工作正常:如果第二路径被改写为
事业事情会简单得多。但从REST的角度来看,这也感觉不太好。这同样适用于更新场景(具有GET/accounts /:id/update与PUT/accounts /:id)。
有没有指导如何处理?我从错误的角度来看问题还是完全没有问题?(从实际的角度来看)?
请问您能说清楚一下是什么意思吗?但是从REST的角度来看,这也不是很好吗? – 2014-08-27 10:48:02
当然。我希望通过对/ accounts(而不是/ accounts/new)执行POST来创建新的帐户资源,因为这'感觉不错',即通过查看路由定义可以清楚语义。 必须执行POST到/ accounts/new可能会混淆其他客户端,如果他们使用相同的API。 正如我所说,也许这并不像我想的那么严重。 – alexhanschke 2014-08-27 10:56:57