- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Scala Play 2、Slick 3 和 PostgreSQL 构建网络应用程序。我的目的是从 Controller 返回 JSON。
这些是依赖关系-
libraryDependencies ++= Seq(
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
"com.typesafe.slick" %% "slick" % "3.0.0",
"com.typesafe.play" %% "play-slick" % "1.0.1",
"com.typesafe.play" %% "play-slick-evolutions" % "1.0.1",
specs2 % Test
)
这是我的模型 -
package models
import play.api.libs.json.Json
import slick.driver.PostgresDriver.api._
import scala.concurrent.Future
case class User(id: String, name: String)
object Users extends ModelInit {
class UserModel(tag: Tag) extends Table[User](tag, "USERS") {
def id = column[String]("ID", O.PrimaryKey)
def email = column[String]("EMAIL")
def * = (id, email) <> (User.tupled, User.unapply)
}
lazy val users = TableQuery[UserModel]
implicit val userFormat = Json.format[UserModel]
def all = {
db.run(users.result)
}
def create(user: User): Future[Int] = {
db.run(users += user)
}
def getById(name: String) = {
val selectQuery = users.map(_.id)
val selectAction = selectQuery.result
db.run(selectAction)
}
}
这是我的 Controller -
package controllers
import models.Users
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.json._
class Application extends Controller {
def index = Action {
Users.all.map(user => println(Json.toJson(user)))
Ok(views.html.index("Your new application is ready."))
}
}
目前我收到“未找到未应用或未应用序列函数”异常。这是完整的堆栈跟踪 -
play.sbt.PlayExceptions$CompilationException: Compilation error[No unapply or unapplySeq function found]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
at scala.util.Either$LeftProjection.map(Either.scala:377) ~[scala-library.jar:na]
at play.sbt.run.PlayReload$.compile(PlayReload.scala:17) ~[na:na]
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3$$anonfun$2.apply(PlayRun.scala:61) ~[na:na]
at play.runsupport.Reloader$$anonfun$reload$1.apply(Reloader.scala:323) ~[na:na]
at play.runsupport.Reloader$$anon$3.run(Reloader.scala:43) ~[na:na]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_05]
at play.runsupport.Reloader$.play$runsupport$Reloader$$withReloaderContextClassLoader(Reloader.scala:39) ~[na:na]
at play.runsupport.Reloader.reload(Reloader.scala:321) ~[na:na]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:113) ~[play-server_2.11-2.4.3.jar:2.4.3]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) ~[play-server_2.11-2.4.3.jar:2.4.3]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library.jar:na]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library.jar:na]
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) ~[akka-actor_2.11-2.3.13.jar:na]
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) ~[akka-actor_2.11-2.3.13.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) ~[scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) ~[scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) ~[scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) ~[scala-library.jar:na]
最佳答案
将 Json 格式化程序移动到 Controller 解决了这个问题。
我当前的模型 -
package models
import play.api.libs.json.Json
import slick.driver.PostgresDriver.api._
import scala.concurrent.Future
case class User(id: String, name: String)
object Users extends ModelInit {
class UserModel(tag: Tag) extends Table[User](tag, "USERS") {
def id = column[String]("ID", O.PrimaryKey)
def email = column[String]("EMAIL")
def * = (id, email) <> (User.tupled, User.unapply)
}
lazy val users = TableQuery[UserModel]
def all = {
db.run(users.result)
}
def create(user: User): Future[Int] = {
db.run(users += user)
}
def getById(name: String) = {
val selectQuery = users.map(_.id)
val selectAction = selectQuery.result
db.run(selectAction)
}
}
和当前 Controller -
package controllers
import models.Users
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.json._
class Application extends Controller {
def index = Action {
implicit val userFormat = Json.format[UserModel]
Users.all.map(user => println(Json.toJson(user)))
Ok(views.html.index("Your new application is ready."))
}
}
关于json - 在 Scala Play 应用程序中获取 “No unapply or unapplySeq function found” 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715450/
在 object Sized (在“shapeless/sized.scala”中)有 unapplySeq ,不幸的是它不提供静态检查。例如,下面的代码将在运行时失败并显示 MatchError :
我想要一个提取器来隐式转换它的参数,但它似乎不起作用。考虑这个非常简单的案例: case class MyString(s: String) {} implicit def string2mystri
在下面的代码中,我试图了解 Foo#unapply : Option[Int] 在模式匹配方面的用法。 $ls Test.scala $cat Test.scala object Test { c
显然,提取器对象中的 unapply/unapplySeq 不支持隐式参数。假设这里有一个有趣的参数 a 和一个令人不安的普遍存在的参数 b,在提取 c 时可以很好地隐藏它。 [ 编辑 ]:在我的 i
我有一个从字符串中提取对象的提取器。 case class ItemStructure(id: String, data: String) object ItemStructure { def u
我真的不明白这个小东西。我有一个抽象类 Box 有几个不同类型的子类。例如 abstract class Box class StringBox(val sValue : String) extend
我有以下情况,给定两种类型 MA 和 MB,我希望能够证明它们不仅具有 Applicative 而且它们都具有相同的基础形状。我尝试执行以下操作: type UnapplyM[TC[_[_]], MA
以下代码: object Test { @inline def unapply(i: Int): Option[String] = i match { case 1 => So
我刚刚发现我的提取器中的 unapply 出于某种原因被调用了两次。任何人都知道为什么,以及如何避免它? val data = List("a","b","c","d","e") object Uap
如果我不在 Some 方法中使用 unapply,为什么以下代码不起作用? scala> object T { | def unapply(i:Int) = (i+1,i+2) //Some
Django runserver 提示: You have unapplied migrations; your app may not work properly until they are ap
阅读 this ,我仍然对返回 Boolean 的 unapply() 有疑问。 如果查看 Scala Programming Book (2nd edition),第 602 页。有一个例子: ca
我有以下代码旨在在同一个提取器中定义 unapply 和 unapplySeq test("pattern matching define unapply and unapplySeq") {
鉴于: import shapeless._ import syntax.singleton._ case class Foo(a: String, one: Witness.`1`.T) 为什么要F
我希望能够做到这一点: scala> val Int(i) = "1" i: Int = 1 但是Int没有 unapply方法。 我找到了 this answer它给出了如何向现有对象隐式添加方法的
为什么 Scala 同时具有 unapply 和 unapplySeq?两者有什么区别?我什么时候应该选择其中一种而不是另一种? 最佳答案 无需深入细节并稍微简化一下: 对于常规参数apply构造和u
什么是unapply方法是Scala?它是如何工作的? 我知道 OCaml 等其他语言中的模式匹配,通常你几乎无法控制它。 Scala 在提供方面是独一无二的吗unapply方法,或者是否有其他语言提
我不能在 unapply 上使用泛型吗?提取器的方法以及隐式“转换器”以支持特定于参数化类型的模式匹配? 我想这样做( 注意在 [T] 行 上使用 unapply ), trait StringDec
我尝试创建一个用于模式匹配的 unapply 方法,并尝试使其返回与 Option 不同的内容,但是,Eclipse 将其显示为错误。是否存在 unapply 必须返回 Option[T] 的规则?
考虑以下代码: case class User(id: Int, name: String) object User{ def unapply(str: String) = Some(User(0
我是一名优秀的程序员,十分优秀!