【发布时间】:2018-10-22 17:51:34
【问题描述】:
我想将 FieldMapping 类的集合保存为 json 字符串 -
abstract class Field {
def clazz: Class[_]
def name: String
}
case class StringField(name: String) extends Field {
override def clazz: Class[_] = classOf[String]
}
case class DateField(name: String) extends Field {
override def clazz: Class[_] = classOf[Date]
}
... 等 - 完整代码在这里: https://github.com/alexeyOnGitHub/scala-typesafe/blob/master/src/main/scala/com/example/model/Field.scala
Circe 代码:
import com.example.model.{DateField, Field, FieldMapping, StringField}
import io.circe.generic.semiauto.{deriveDecoder, deriveEncoder}
import io.circe.{Decoder, Encoder}
object CirceBoilerplateForConfigs {
implicit val fieldDecoder: Decoder[StringField] = deriveDecoder[StringField]
implicit val fieldEncoder: Encoder[StringField] = deriveEncoder[StringField]
implicit val dateDecoder: Decoder[DateField] = deriveDecoder[DateField]
implicit val dateEncoder: Encoder[DateField] = deriveEncoder[DateField]
implicit val fooDecoder: Decoder[FieldMapping] = deriveDecoder[FieldMapping]
implicit val fooEncoder: Encoder[FieldMapping] = deriveEncoder[FieldMapping]
}
错误:(14, 65) 找不到类型的惰性隐式值 io.circe.generic.decoding.DerivedDecoder[com.example.model.FieldMapping] 隐式 val fooDecoder: Decoder[FieldMapping] = derivedDecoder[FieldMapping] 错误:(14, 65)
deriveDecoder 方法的参数不足:(隐式解码: shapeless.Lazy[io.circe.generic.decoding.DerivedDecoder[com.example.model.FieldMapping]])io.circe.Decoder[com.example.model.FieldMapping]。 未指定值参数解码。隐式 val fooDecoder: 解码器[FieldMapping] = 派生解码器[FieldMapping] 错误:(15, 65)
找不到类型的惰性隐式值 io.circe.generic.encoding.DerivedObjectEncoder[com.example.model.FieldMapping] 隐式 val fooEncoder: Encoder[FieldMapping] = derivedEncoder[FieldMapping] 错误:(15, 65)
没有足够的论据 方法派生编码器:(隐式编码: shapeless.Lazy[io.circe.generic.encoding.DerivedObjectEncoder[com.example.model.FieldMapping]])io.circe.ObjectEncoder[com.example.model.FieldMapping]。 未指定的值参数编码。隐式 val fooEncoder: 编码器[FieldMapping] = 派生编码器[FieldMapping]
【问题讨论】:
-
在您的要点中,您没有提供
GUser的代码。 -
FieldMapping也没有定义。 -
如果我注释掉
case class GUserField、def user、import com.example.model...、implicit val fooDecoder、implicit val fooEncoder一切都会编译。 -
这里是其余代码 - github.com/alexeyOnGitHub/scala-typesafe/tree/master/src/main/… 我需要 FieldMapping 集合的编码器/解码器,因为这是我想要转换为 json 字符串的内容