0

I have a scala case class as follows

case class Intro(name : String, quality : Any)

I am using scala circe library for encoding this object to Json. The code which i am using is

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

object Example extends App{
      println(Intro("Vikash","something").asJson)    
}

It is giving me following error during compilation.

 could not find implicit value for parameter encoder: io.circe.Encoder[com.xxx.Intro]

If i change the type of case class attribute quality to type String then it works fine.

How to encode case class with Any type in attribute

Thanks

4

1 回答 1

1

您的问题与您正在使用自动编解码器生成这一事实有关,这完全是编译时间,因此给定类型 Any 的值几乎不可能为其生成编解码器。您应该能够通过以下方式之一解决此问题:

  1. 使用泛型而不是 Any,您必须确保您使用的类型存在 Encoder 和 Decoder 类型类的实例。你的班级应该是这样的:case class Intro[T](name: String, quality: T)。这样您就可以使用 Intro[String]、Intro[Int] 等。
  2. 为 Any 类型提供您自己的编码器/解码器实例,这很难实现,对我来说是个坏主意。

如果您不知道什么是类型类或隐式解析是如何工作的,您应该首先了解它们。

于 2017-09-08T10:40:07.093 回答