gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:18 25 4
gpt4 key购买 nike

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

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

...我基本上想检查它是否被传入:

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

但是,我遇到了一个编译错误:

type mismatch; found : Null(null) required: Long Note that implicit conversions are not applicable because they are ambiguous: both method Long2longNullConflict in class LowPriorityImplicits of type (x: Null)Long and method Long2long in object Predef of type (x: Long)Long are possible conversion functions from Null(null) to Long

为什么我不能这样做,将 null 指定为预期的 Long 可选查询参数的默认值?执行此操作的替代方法是什么?

最佳答案

请记住,路由中的可选查询参数是 scala.Long 类型,而不是 java.lang.Long。 Scala 的 Long 类型等同于 Java 的原始 long,不能赋值为 null

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

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

您也可以尝试将 id 包装在 Scala Option 中,因为这是 Scala 中处理可选值的推荐方式。但是我认为 Play 不会将可选的 Scala Long 映射到可选的 Java Long(反之亦然)。你要么必须在你的 route 有一个 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()) {...}
...
}

关于java - 为路由中的可选查询参数分配空默认值 - Play Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com