다음은 사용자 정보를 보유하는 간단한 케이스 클래스입니다.
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class User(
val username: String,
val password: String
)
... 그리고 다음은 User
JSON으로 /로부터 객체를 직렬화 / 역 직렬화하는 기능을 제공하는 동반 객체입니다 .
object User {
implicit val userWrites: Writes[User] = (
(__ \ 'username).write[String] ~
(__ \ 'password).write[String]
)(unlift(User.unapply))
implict val userReads: Reads[User] = (
(__ \ 'username).read[String] ~
(__ \ 'password).read[String] // how do I invoke the password hasher here?
)(User.apply(_, _))
}
User
객체가 항상 해시 된 암호를 포함해야하지만 들어오는 JSON은 항상 일반 텍스트를 제공 한다고 가정 해 봅시다. Reads
역 직렬화하는 동안 암호 해시를 호출하도록 어떻게 향상시킬 수 있습니까?
다음에서 map
방법을 사용할 수 있습니다 Reads
.
def doSomething(s: String) = s * 3
case class User(val username: String, val password: String)
object User {
implicit val userWrites: Writes[User] = (
(__ \ 'username).write[String] ~
(__ \ 'password).write[String]
)(unlift(User.unapply))
implicit val userReads: Reads[User] = (
(__ \ 'username).read[String] ~
(__ \ 'password).read[String].map(doSomething)
)(User.apply(_, _))
}
그리고:
scala> Json.parse("""{"username": "foo", "password": "bar"}""").as[User]
res0: User = User(foo,barbarbar)
그러나 이것은 당신 Reads
과 Writes
더 이상 서로 반대가 아님을 의미합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다