java - 如何使用任何作为案例类的参数类型将scala案例类编码为json?

标签 java json scala encoding circe

我有一个 scala 案例类,如下

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

我正在使用 scala circe 库将此对象编码为 Json。 我正在使用的代码是

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

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

编译过程中出现以下错误。

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

如果我将案例类属性 quality 的类型更改为 String 类型,那么它就可以正常工作。

如何使用属性中的 Any 类型对案例类进行编码

谢谢

最佳答案

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

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

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

关于java - 如何使用任何作为案例类的参数类型将scala案例类编码为json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114041/

相关文章:

java - Java 中的方法

javascript - lodash json组对象成本

scala - 如何将 Map 中的键转换为小写?

java - 确定文件夹是否存在?

java - 将主类值存储在子类中作为数组

java - 几个 jar 中的 freemarker 模板

javascript - 使用流创建插件 gulp

json - 快速编码 : Is it possible to get dictionary key:values in order returned in json response?

java - Neo4j - java.lang.NoClassDefFoundError : org/parboiled/scala/Parser

scala - 如何在 typesafeconfig 中将 ConfigValue 转换为 List[ConfigObject]