Sttp,Circe,Json -如何将Json反序列化为自定义对象?

jfewjypa  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个简单的case类来模拟Http响应:

case class Other(name: String, age: Int)
case class MyResponse(id: String, name: String, others: List[Other])

我为他们设计了解码器:

implicit val decoderOther: Decoder[Other] = deriveDecoder[Other]
implicit val decoderMyResponse: Decoder[MyResponse] = deriveDecoder[MyResponse]

但是当我在sttp http客户端上调用它时:

basicRequest.(...).get(...).response(asJson[MyResponse].getRight).send(backend).map(_)

我得到一个Desarialization错误:

sttp.client3.DeserializationException: DecodingFailure at .id Missing required field

我不知道为什么它不能被正确解析。解码器看起来很好。当我把MyResponse改为circe Json类时,它工作得很好:

Response([{ "id": "121", "name": "test", "others": [] }])

但我想把它解析成我的模型,你能帮我吗

xtfmy6hx

xtfmy6hx1#

如果您写入asJson[MyResponse],则需要Encoder而不是Decoder
所以加上

implicit val encoderOther: Encoder[Other]           = deriveEncoder[Other]
implicit val encoderMyResponse: Encoder[MyResponse] = deriveEncoder[MyResponse]

您可以将EncoderDecoder替换为Codec
x一个一个一个一个x一个一个二个x
https://scastie.scala-lang.org/DmytroMitin/W3wgn0gbRXyA1vRI6OyoUg/1
如果您仍然遇到问题,请准备MCVE

相关问题