我对 Scala 有点陌生,我正在尝试为我想使用的 RESTful api 编写一个通用客户端。我能够为我想实例化我的客户端的具体案例类提供具体的Reads[T]
和特定的案例类,但是编译器希望找到任何类型的和,而不仅仅是我正在使用的类型。一些代码来说明(我省略了不相关的部分):Writes[T]
Reads[T]
Writes[T]
我的通用客户:
class RestModule[T](resource: String, config: Config) ... with JsonSupport{
...
def create(item: T): Future[T] = {
val appId = config.apiId
val path = f"/$apiVersion%s/applications/$appId%s/$resource"
Future {
val itemJson = Json.toJson(item)
itemJson.toString.getBytes
} flatMap {
post(path, _)
} flatMap { response =>
val status = response.status
val contentType = response.entity.contentType
status match {
case Created => contentType match {
case ContentTypes.`application/json` => {
Unmarshal(response.entity).to[T]
}
case _ => Future.failed(new IOException(f"Wrong Content Type: $contentType"))
}
case _ => Future.failed(new IOException(f"HTTP Error: $status"))
}
}
...
}
JsonSupprt 特性:
trait JsonSupport {
implicit val accountFormat = Json.format[Account]
}
我只是实例化,RestModule[Account]("accounts",config)
但我得到了错误
Error:(36, 32) No Json serializer found for type T. Try to implement an implicit Writes or Format for this type.
val itemJson = Json.toJson(item)
^
当 T 只能是 Account 类型时,为什么编译器认为它需要对类型 T 的写入?有没有办法解决这个问题?