gpt4 book ai didi

scala - Play Framework : How to define a writable object in scala?

转载 作者:行者123 更新时间:2023-12-01 11:08:48 27 4
gpt4 key购买 nike

使用 Play,我有一个名为 RepositoryMetadata 的对象。我想在名为 post 的方法中使用该对象。该方法的定义如下。
def post[T](body: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]): Future[WSResponse]

如何将对象 RepositoryMetadata 变成 Writeable

最佳答案

对于任何感兴趣的人,我在使用 Play 的 WSClient 时遇到了类似的问题。我目前使用的版本 (2.5.3) 具有以下签名:

def post[T](body: T)(implicit wrt: Writeable[T]): Future[WSResponse]

如果您碰巧需要将有效负载作为 json 发布(只要您已经为您的类定义了 play.api.libs.json.Writes 转换器),您可以使用以下内容:
import play.api.http.{ContentTypeOf, ContentTypes, Writeable}
import play.api.libs.json.Writes
import play.api.mvc.Codec

trait WritableImplicits {
implicit def jsonWritable[A](implicit writes: Writes[A], codec: Codec): Writeable[A] = {
implicit val contentType = ContentTypeOf[A](Some(ContentTypes.JSON))
val transform = Writeable.writeableOf_JsValue.transform compose (writes.writes _)
Writeable(transform)
}
}

object WritableImplicits extends WritableImplicits

然后
import WritableImplicits._
...
val metadata: RepositoryMetadata = ???
wsClient.url(url).post(metadata)
...

应该就是这样!

笔记:
如果您没有在范围内定义隐式 Writes,您可以执行以下操作:
import play.api.libs.json._

object RepositoryMetadata {
implicit val repositoryMetadataWrites = Json.writes[RepositoryMetadata]
}

关于scala - Play Framework : How to define a writable object in scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com