将参数添加到隐式读取中可以使用Play从JSON构建案例类

将参数添加到隐式读取中可以使用Play从JSON构建案例类,json,scala,playframework,Json,Scala,Playframework,我需要将一个静态值添加到使用Play framework从JSON构建的case类中。我可以这样添加一个常量值: implicit val userRead: Reads[UserInfo] = ( Reads.pure(-1L) and (JsPath \ "firstName").readNullable[String] and (JsPath \ "lastName").readNullable[String] )(UserInfo.apply _) case class

我需要将一个静态值添加到使用Play framework从JSON构建的case类中。我可以这样添加一个常量值:

implicit val userRead: Reads[UserInfo] = (
  Reads.pure(-1L) and
  (JsPath \ "firstName").readNullable[String] and
  (JsPath \ "lastName").readNullable[String] 
)(UserInfo.apply _)
case class UserInfo(id: Long, firstName: Option[String], lastName: Option[String])

但我不知道如何在调用变量时将其传递到隐式读取中。我是Scala的新手,所以可能遗漏了一些明显的东西?

有一个更简单的解决方案:

import play.api.libs.json._
添加在末尾具有静态默认值的所有值:

case class UserInfo(firstName:String, lastName:String, id:Long = -1)
使用带有默认值的
播放json格式

object UserInfo{

    implicit val jsonFormat: Format[UserInfo] = Json.using[Json.WithDefaultValues].format[UserInfo]
}
像这样使用它

val json = Json.toJson(UserInfo("Steve", "Gailey"))

println(json.validate[UserInfo])

看这里,我假设你的
UserInfo
是这样的:

implicit val userRead: Reads[UserInfo] = (
  Reads.pure(-1L) and
  (JsPath \ "firstName").readNullable[String] and
  (JsPath \ "lastName").readNullable[String] 
)(UserInfo.apply _)
case class UserInfo(id: Long, firstName: Option[String], lastName: Option[String])
您只需稍微调整一下
userRead

def userRead(id: Long): Reads[UserInfo] = (
  Reads.pure(id) and
  (JsPath \ "firstName").readNullable[String] and
  (JsPath \ "lastName").readNullable[String]
)(UserInfo.apply _)
然后在解码json时显式地使用它:

json.as[UserInfo](userRead(12345L))
或者,实例化
读取
,使其
隐式

implicit val userRead12345 = userRead(12345L)

json.as[UserInfo]