11

JSON 読み取りを介してオブジェクトを構築するときに、定数値を使用したいと思います。

たとえば、クラスは次のようになります。

case class UserInfo(
  userId: Long = -1, 
  firstName: Option[String] = None,
  lastName:  Option[String] = None
)

そして、読み取りは次のようになります。

   implicit val userRead: Reads[UserInfo] = (
      (JsPath \ "userId").read[Long] and
      (JsPath \ "firstName").readNullable[String] and
      (JsPath \ "lastName").readNullable[String] 
    )(UserInfo.apply _)

しかし、JSON オブジェクトで userId の値を指定する必要はありません。-1 の値が、読み取られる JSON オブジェクトで指定せずに UserInfo オブジェクトで常に作成されるように、Reads をコーディングするにはどうすればよいでしょうか?

4

2 に答える 2

11

使用するReads.pure

implicit val userRead: Reads[UserInfo] = (
  Reads.pure(-1L) and
  (JsPath \ "firstName").readNullable[String] and
  (JsPath \ "lastName").readNullable[String] 
)(UserInfo.apply _)
于 2014-10-15T14:47:28.220 に答える
0

ありがとう!

強制的にロングにするために、1 つの小さな変更を加える必要がありました。

implicit val userRead: Reads[UserInfo] = (
  Reads.pure(-1:Long) and
  (JsPath \ "firstName").readNullable[String] and
  (JsPath \ "lastName").readNullable[String] 
)(UserInfo.apply _)
于 2014-10-15T15:22:30.220 に答える