我花了最后一天搜索和阅读各种网站和文章,试图找到自己的问题的答案,我没有发现任何有用的东西.我甚至不确定这是否可行.我的问题是我试图使用lift-json解析并提取Json响应.响应由4部分组成,其中前3个部分对于我所做的每种类型的请求的每个响应总是相同的.最后一部分取决于请求的类型,但它总是一个类型的列表.我希望做这样的事情:
abstract class MyObjects
case class Apple(id: Int, name: String, color: String) extends MyObjects
case class Orange(id: Long, name: String, state: String) extends MyObjects
abstract class MyResponse
case class Fruits[T <: MyObjects](aisle: Int, bin: Int, hasWhat: Option[List[T]])
Run Code Online (Sandbox Code Playgroud)
如果我想知道所有的苹果是什么,我会提出要求,并回复一个苹果列表的回复.当我尝试提取此示例时:
myJson.extract[Fruits[Apple]]
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
net.liftweb.json.MappingException: do not know how to get type parameter from T
at net.liftweb.json.Meta$.fail(Meta.scala:128)
at net.liftweb.json.Meta$Reflection$.term$1(Meta.scala:206)
at net.liftweb.json.Meta$Reflection$.typeParameters(Meta.scala:220)
at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:91)
at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:101)
at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:90)
at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:107)
at net.liftweb.json.Meta$.toArg$1(Meta.scala:117)
at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:83)
at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:82)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:...
Run Code Online (Sandbox Code Playgroud)
我正在使用lift-json 2.1和scala 2.8.我确实有办法解决它,通过专门为每种类型的响应创建一个案例类,但我认为我想要做的更干净.只是想知道a)这是否可能?b)如果是这样,我做错了什么?
编辑...示例应用程序:
val apples = …Run Code Online (Sandbox Code Playgroud)