Scala Circe编码器类型任何

问题描述

我正在尝试将class ResponseResult编码为json

case class ResponseResult (var Code : Int,var Message: String,var Data: Any )

var json = ResponseResult(1,"2",List(3,4,5)).asJson

我收到错误消息找不到参数编码器的隐式值:io.circe.Encoder [ResponseResult]

然后我创建编码器

object ResponseResult {
    implicit val encodeResult: Encoder[ResponseResult] =
        Encoder.forProduct3[ResponseResult,Int,String,Any]("Code","Message","Data") {
            case ResponseResult(c,m,d) => (c,d.toString)
        }
}

我收到错误消息找不到参数编码器的隐式值:编码器[任何]

这是我的完整代码

import io.circe.Encoder
import io.circe.generic.auto._
import io.circe.syntax._

object a {
  case class ResponseResult (var Code : Int,var Data: Any )
  object ResponseResult {
    implicit val encodeResult: Encoder[ResponseResult] =
      Encoder .forProduct3[ResponseResult,"Data") {
        case ResponseResult(c,d.toString)
      }
  }

  def main(args: Array[String]): Unit = {
    var json = ResponseResult(1,5)).asJson
  }
}

任何人都可以告诉我如何编码class ResponseResult。 谢谢

解决方法

那么,就没有Any类型的编解码器了。

如果要在此处传递一些值,对其进行序列化并在以后可以反序列化,则必须采用某种类型。您可以使用类型参数来推迟此假设:

case class ResponseResult[Data](Code : Int,Message: String,Data: Data)

,并且需要使用此类型参数的编码器:

object ResponseResult {
  implicit def encodeResult[Data: Encoder]: Encoder[ResponseResult[Data]] =
    Encoder.forProduct3[ResponseResult[Data],Int,String,Data]("Code","Message","Data") {
      case ResponseResult(c,m,d) => (c,d)
    }
}

然后您将能够根据需要序列化数据

// inferred to ResponseResult[List[Int]]
val response = ResponseResult(1,"2",List(3,4,5))

// and Circe can generate codec for List[Int] automatically
// so it can now generate codec for ResponseResult[List[Int]]
val json = response.asJson
,

实际上,您可以将 Json 类型用于数据。

case class ResponseResult (var Code : Int,var Message: String,var Data: io.circe.Json )

因此您可以将任何内容传递给 Data,也可以为 null。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...