playframework - 用于解析/验证 Play 框架中特定路由的 URL 的类?

标签 playframework playframework-2.3

如果我有一个 URL 字符串,比如 https://localhost/users/45,我的 Play Framework 2.3 项目中有一个看起来像这样的路由

GET/users/:id UserController.get(id:Long)

我如何验证/解析该 URL 并从中获取 ID?我实际上知道我要检查的具体路线/电话。我真正想做的是反向反向路由,像这样:

routes.UserController.get_parse(url) 匹配 { case (id:Long) => println("使用数据") case _ => throw Exception("Bad URL")

是否有某种机制可以做到这一点?

最佳答案

在您考虑实现 REST/超媒体 API 之前,这个请求看起来很奇怪。

假设路由文件是

GET /foo/:id/bar Foo.bar(id)

有人 POST {"data":"something", "parent": "/foo/5/bar"}/foo/123/bar

Play 将从请求 URL /foo/123/bar 中提取 id 参数(例如,对于内部数据库 id),但是您可以为解析 /foo 做同样的事情吗/5/条?


简短的回答

不,你不能为此使用路由文件。


长答案

Play从路由文件生成转换代码

  1. string => 使用参数调用 Controller 方法

  2. Controller 方法标识符 + 参数 => 字符串

你想要的要么是

  1. string => Controller 方法 + 参数

  2. Controller 方法标识符 + 字符串 => 参数

一些缺点:

#3 不是类型安全的。

#4 含糊不清。多个路由规则可以引用同一个方法。您可以为该 Controller 方法尝试所有规则,尽管这更复杂,并且默认参数在这里可能是个问题。

无论如何,路由编译器都不会生成合适的代码。它要么不存在,要么被限制访问。

例如,路由编译器生成 target/scala-2.x/src_managed/main/routes_routing.scala 类似

private[this] lazy val Foo_bar0_route = Route(
  "GET",
   PathPattern(
     List(
       StaticPart(Routes.prefix),
       StaticPart(Routes.defaultPrefix),
       StaticPart("/foo/"),
       DynamicPart("id", """[^/]""", true),
       StaticPart("/bar")
     )
   )
)

这可能有帮助,但 private[this] 阻止了它。

关于playframework - 用于解析/验证 Play 框架中特定路由的 URL 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27111763/

相关文章:

database - H2 内存数据库,[JdbcSQLException : Table "USERINFO" not found; SQL statement:

Scala 类型不匹配

java - 使用 2 个提交按钮播放 Framework 2.3.2

java - 使用 ActorSystem 和 Guice 时停止时出现异常

playframework-2.3 - securesocial 3.0 不适用于 play framework 2.3

scala - Play Framework 2 - Scala - 为测试套件启动一个应用程序

javascript - Play 框架和 javascript Assets 路由器

mysql - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'RECEPTORS.r_name' in 'field list'

java - play框架的输入文本值总是传递0

mysql - 映射通过 Ebean/Play 框架的问题