我想在Play应用程序中提取json作为案例类.case类中的属性在camelCase中定义,json数据在snake_case中.
case class User(userId: Long, userName: String)
Run Code Online (Sandbox Code Playgroud)
和json就像这个{"user_name":"Vishal","user_id":67}
是否有一种简单的方法来指示播放json自动进行映射和提取,例如提供一些注释等.
我的特质方法是:
userService{
def link(current: U, to:User): Future[U]
def findUserByEmail(email:String):Future[Option[User]]
}
Run Code Online (Sandbox Code Playgroud)
当我执行时我使用:
for(link(currentUser, userService.findUserByEmail(email).result(Duration(1000, MILLISECONDS)).get)){
...
}
Run Code Online (Sandbox Code Playgroud)
而错误是:
[error] G:\testprojects\mifun\modules\app\controllers\
ProviderController.scala:130: Don't call `Awaitable` methods directly, use the `
Await` object.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这里必须使用await对象而不是等待方法,以及如何正确地更改它.
我有一个主程序,它创建一个ActorSystem,一个Actor并向actor发送一些消息.处理完消息后,我发送了PoisonPill来杀死Actor.然后我关闭了演员系统.
在演员中,我呼叫Await等待未来完成.我面临的问题是,即使演员被PoisonPill终止并且ActorSystem被关闭,应用程序也不会退出.
def main(args: Array[String]): Unit = {
val actorSystem = ActorSystem("sytem")
val creationActor = actorSystem.actorOf(Props[MyActor], "MyActor")
...
creationActor ! Message //may be called multiple times
creationActor ! PoisonPill
...
}
Run Code Online (Sandbox Code Playgroud)
而Actor代码是
class MyActor extends Actor {
override def receive: Receive = {
case Message => {
...
Await.result(Dataset.create(datasetId), 30 seconds)
//Dataset.create returns a Future. Also this method uses an
//ExecutionContext of its own.
...
}
}
override def postStop() = {
context.system.shutdown()
}
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉Await.result部分,该程序将退出.
编辑:
看起来我找到了根本原因.
Dataset.create(...)中使用的ExecutionContext是罪魁祸首.当我使用不使用Futures的同步版本的Dataset.create(...)时,我的应用程序退出.
Dataset.create()使用的ec是这样定义的 …
我想知道在Java/Scala源代码中组织导入的首选/最常见的样式.我首先遵循java/scala导入的风格,然后是org.净.等等然后com.
import java.util....
import scala.collection...
import org.apache...
import net.liftweb.json
import com.mycompany...
Run Code Online (Sandbox Code Playgroud)
最近,我的一位队友提出了这种方法
- external libraries
- internal libraries
- scala
- java
Run Code Online (Sandbox Code Playgroud)
喜欢
import net.liftweb.json._
import com.mycompany.logging.Logger
import com.mycompany.api.Statsd
...
import scala.util.{ Try, Success, Failure }
import scala.concurrent.{ ExecutionContext, Future, Await }
import java.util.Date
Run Code Online (Sandbox Code Playgroud)
想知道SO人的意见.
马丁会怎么说?
(从而将这个问题置于纯粹意见的范围之外.对这个问题的答案是可以验证的.正如马丁所说,社区也是如此.)
保罗将如何回应?
众所周知,@ extempore已经对Scala代码库进行了大量的提交,只是为了scala在前面添加,util因为在存在名为的空目录时存在某种类型的包加载错误行为util.
显然,这不是一个"软"的问题.
奖金问题:如果有的话,一个人放在哪里_root_?