gpt4 book ai didi

scala - Scala 中的 Joda 编码/解码

转载 作者:行者123 更新时间:2023-11-28 20:51:36 24 4
gpt4 key购买 nike

我正在尝试使用 akka.http.scaladsl.testkit.responseAs 来测试一些端点,但我不知道如何处理 org.joda.time.DateTime 对象的编码/解码过程.例如,考虑下面的案例类:

case class ConfigEntity(id: Option[Int] = None, description: String, key: String, value: String, expirationDate: Option[DateTime] = None)

另外,考虑以下路由测试:

"retrieve config by id" in new Context {
val testConfig = testConfigs(4)
Get(s"/configs/${testConfig.id.get}") ~> route ~> check {
responseAs[ConfigEntity] should be(testConfig)
}
}

当我运行“sbt 测试”时,代码无法编译,并抛出以下错误:“找不到类型为 akka.http.scaladsl.unmarshalling.FromResponseUnmarshaller[me.archdev.restapi.models 的证据参数的隐式值.ConfigEntity]"

我知道该消息非常不言自明,但我仍然不知道如何创建代码提示的隐式 FromResponseUnmarshaller。

我的代码基于这个例子:https://github.com/ArchDev/akka-http-rest

我只是在创建一些新实体并尝试玩...

提前致谢。

最佳答案

此项目使用 CirceSupport。这意味着您需要为编译器提供一个 Circe Decoder 来派生 Akka Http Unmarshaller。

将解码器放在范围内:

case class ConfigEntity(id: Option[Int] = None, description: String, key: String, value: String, expirationDate: Option[DateTime] = None)

implicit val decoder = Decoder.decodeString.emap[DateTime](str =>
Right(DateTime.parse(str))
)

"retrieve config by id" in new Context {
val testConfig = testConfigs(Some(4))
Get(s"/configs/${testConfig.id.get}") ~> route ~> check {
responseAs[ConfigEntity] should be(testConfig)
}
}

显然,您必须处理可能的异常,尝试解析 DateTime 并返回 Left 而不是 Right...

我必须说我总是为 Akka Http 使用 SprayJsonSupport,这是我第一次看到 CirceSupport。

希望这对您有所帮助。

关于scala - Scala 中的 Joda 编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44639489/

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