【问题标题】:No ByteString deserializer found for type models.MpMember. Try to implement an implicit ByteStringDeserializer for this type找不到类型 models.MpMember 的 ByteString 反序列化器。尝试为此类型实现隐式 ByteStringDeserializer
【发布时间】:2015-08-20 16:20:32
【问题描述】:

我在 Play 2.4 中使用 etaty rediscala (1.4.2) 连接到 Redis。我的代码如下:

override def getMember(token: String): Future[Option[Member]] = {
  redisClient.get[Member](token)
}

但是,它显示了这个错误:

找不到类型 models.Member 的 ByteString 反序列化器。尝试为此类型实现隐式 ByteStringDeserializer。

我的会员如下:

case class Member(
  memberId : Long = 0l,
  email : String = "",
  firstName : Option[String] = None,
  lastName : Option[String] = None
)

object Member {
  implicit val memberReads : Reads[Member] = Json.reads[Member]
  implicit val memberWrites : Writes[Member] = Json.writes[Member]
}

感谢您的帮助。

【问题讨论】:

  • 你希望它在redis中序列化为JSON吗?还是别的什么?
  • 我想获取给定token作为key的值,并将值转换为Scala Member模型

标签: json scala redis playframework-2.4


【解决方案1】:

我找到了解决方案。我将 Scala 对象转换为 Json 并作为字符串保存到 Redis。

object Member {
  implicit val byteStringFormatter = new ByteStringFormatter[Member] {
    def serialize(data: Member): ByteString = {
    ByteString(Json.toJson(data).toString)
  }

  def deserialize(bs: ByteString): Member = {
    val s = bs.utf8String
    Json.fromJson[Member](Json.parse(s)).get
  }
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2011-09-16
    • 2013-05-29
    相关资源
    最近更新 更多