使用Play框架覆盖HTTP方法

时间:2011-09-16 20:05:58

标签: java http rest playframework playframework-1.x

某些Web框架提供了使用隐藏表单字段“覆盖”HTTP方法的可能性:

<form method="POST">
  <input type="hidden" type="_method" value="PUT">
  ...
</form>

是否可以使用Play框架覆盖HTTP方法?

2 个答案:

答案 0 :(得分:4)

注意:这仅适用于Play 1.x.

查看Router.route()方法的source code,它使用查询字符串中的x-http-method-override参数。根据{{​​3}},您还应该能够使用HTTP标头实现此目的,但我在源代码中看不到这一点。

要使其工作,您需要将覆盖添加到请求字符串。我运行了以下示例以使其工作。

<form action="@{Application.form}?x-http-method-override=PUT" method="POST">
  <input type="submit" type="go" value="go">
</form>

如果将日志记录级别设置为TRACE,您将看到以下输出,显示方法已更改。您应该看到类似 -

的输出
08:20:34,855 TRACE ~ init: begin
08:20:34,858 TRACE ~ Route: /application/form - x-http-method-override=PUT
08:20:34,859 TRACE ~ request method POST overriden to PUT
08:20:34,860 TRACE ~ ------- public static void controllers.Application.form()
08:20:34,861 TRACE ~ init: end true

您还可以检查控制器中的request.method进行确认。

答案 1 :(得分:0)

在Play2中,这是不可能的,创作者have indicated没有计划支持它。您必须通过覆盖Global.onRouteRequest来手动拦截请求并更改HTTP方法。

相关问题