当前位置: 首页 > 面试题库 >

为路由中的可选查询参数分配空默认值-Play框架

郭意
2023-03-14
问题内容

我正在尝试定义一个可选的查询参数,该参数将映射到Long,但当nullURL中不存在该参数时:

GET  /foo  controller.Foo.index(id: Long ?= null)

…并且我本质上想检查它是否传入:

public static Result index(Long id) {
    if (id == null) {...}
    ...
}

但是,出现编译错误:

类型不匹配;
找到:Null(null)必需:Long请注意,隐式转换不明确,因为它们是模棱两可的:类LowPriorityImplicits中类型为(x:Null)Long的方法Long2longNullConflict和对象类型为(x:Long)Long的对象中的方法Long2long都是从Null(null)到Long的可能转换函数

为什么不能这样做,将其分配null为期望的Long可选查询参数的默认值?有什么其他方法可以做到这一点?


问题答案:

请记住,您的路线中的可选查询参数的类型scala.Long不是java.lang.Long。Scala的Long类型等效于Java的原始类型long,并且不能为其分配值null

更改id为type java.lang.Long可以解决编译错误,这也许是解决问题的最简单方法:

GET  /foo  controller.Foo.index(id: java.lang.Long ?= null)

您还可以尝试将其包装id在Scala中Option,因为这是Scala中处理可选值的推荐方法。但是,我认为Play不会将可选的Scala
Long映射到可选的Java Long(反之亦然)。您必须在路由中使用Java类型:

GET  /foo  controller.Foo.index(id: Option[java.lang.Long])

public static Result index(final Option<Long> id) {
    if (!id.isDefined()) {...}
    ...
}

或在Java代码中输入Scala:

GET  /foo  controller.Foo.index(id: Option[Long])

public static Result index(final Option<scala.Long> id) {
    if (!id.isDefined()) {...}
    ...
}


 类似资料:
  • 我需要为以下语法添加路由: 在routes文件中,我尝试使用以下命令 然而,上面的代码并没有捕获URL,而是转到配置中的另一个处理程序(位于select/{term}: 任何关于修复或故障排除的想法将是最受欢迎的。谢谢

  • 问题内容: 我可以在AngularJS中设置路由参数的默认值吗?有没有有办法,并通过相同的途径来处理? 我希望重构现有的代码,如下所示: 它可以工作,但不是很优雅。有没有更好的办法 ? 问题答案: 不允许使用路由参数的默认值。 但是(中的)路由 不应具有默认参数。 资源可以具有默认参数。 在如果你想使用一个可选的参数的路线,这实际上是两个不同的路线。 为什么? 路线应该很简单 路由不允许参数的正则

  • 有没有一种干净的方法可以将当前可选查询参数与模板中链接上的附加可选查询参数合并? 当前URL:< code >/search;brand=Trek 所需的转到链接:(startCount 将递增) 我知道Angular支持合并普通查询参数的功能(https://angular.io/docs/ts/latest/api/router/index/RouterLink-directive.html)

  • 英文原文:http://emberjs.com/guides/routing/query-params/ 通常情况下,URL的动态段是模型的一种序列化表示,最常见的是模型的ID。然后,有时候还需要将应用的其他状态也序列化到URL中。这可能是对从服务器端加载模型有影响的一些参数,比如要查看的是那一页结果;也可能是一些关于客户端状态的信息,比如在客户端实现排序时的记录排序规则。 当然URL中还可以被序

  • 所以我有一些路线,比如<code>/category/tech</code>和<code</categority/tech/new<code>和<code>/category/tech/old</code>等等 他们都使用 或者我必须分别定义它们,就像

  • 问题内容: 是否可以为可选的通用参数提供默认值? 我正在尝试做这样的事情: 但我说错了 这只是我试图做的不可能的事吗? 问题答案: 用您完成的方式是不可能的。仅考虑上述代码,什么是类型?就像它说的那样,编译器无法弄清楚(我也不能,因为数据不存在,我也不能。) 特定问题的解决方案是重载而不是使用默认值: 但这引发了您在这里做什么的问题。您会认为应该如此。否则,您在做什么?如果不诉诸(您应该强烈避免)