带有case类的抽象类的scala circe编码器/解码器
我想将FieldMapping类的集合保存为json字符串-带有case类的抽象类的scala circe编码器/解码器,scala,circe,Scala,Circe,我想将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 Fie
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]
}
。。。etc-此处的完整代码:
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 FoodDecoder:解码器[字段映射]=
deriveDecoder[FieldMapping]错误:(14,65)
没有足够的参数用于方法deriveDecoder:(隐式解码:
shapless.Lazy[io.circe.generic.decoding.DerivedDecoder[com.example.model.FieldMapping]])io.circe.Decoder[com.example.model.FieldMapping]。
未指定值的参数解码。隐式val-FoodDecoder:
解码器[FieldMapping]=deriveDecoder[FieldMapping]错误:(15,65)
找不到类型为的惰性隐式值
io.circe.generic.encoding.DerivedObjectEncoder[com.example.model.FieldMapping]
隐式val fooEncoder:编码器[字段映射]=
deriveEncoder[FieldMapping]错误:(15,65)
没有足够的论据支持
方法deriveEncoder:(隐式编码:
shapeless.Lazy[io.circ.generic.encoding.DerivedObjectEncoder[com.example.model.FieldMapping]])io.circ.ObjectEncoder[com.example.model.FieldMapping]。
未指定的值参数编码。隐式val编码器:
编码器[FieldMapping]=deriveEncoder[FieldMapping]
字段
应为密封特征(对于抽象类或非密封特征,这将不起作用)
编译以下代码:
import java.util.Date
sealed trait 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]
}
case class FieldMapping(fieldInConnector1: Option[Field],
fieldInConnector2: Option[Field],
selected: Boolean,
defaultValue: String)
import io.circe.generic.semiauto.{deriveDecoder, deriveEncoder}
import io.circe.{Decoder, Encoder}
object CirceBoilerplateForConfigs {
implicit val stringDecoder: Decoder[StringField] = deriveDecoder[StringField]
implicit val stringEncoder: Encoder[StringField] = deriveEncoder[StringField]
implicit val dateDecoder: Decoder[DateField] = deriveDecoder[DateField]
implicit val dateEncoder: Encoder[DateField] = deriveEncoder[DateField]
implicit val fieldDecoder: Decoder[Field] = deriveDecoder[Field]
implicit val fieldEncoder: Encoder[Field] = deriveEncoder[Field]
implicit val fooDecoder: Decoder[FieldMapping] = deriveDecoder[FieldMapping]
implicit val fooEncoder: Encoder[FieldMapping] = deriveEncoder[FieldMapping]
}
在您的要点中,您没有为
GUser
提供代码字段映射
也没有定义。如果我注释掉case class GUserField
,def user
,导入com.example.model…
,隐式val-fooDecoder>,implicit val foocoder
一切都会编译。下面是代码的其余部分-我需要用于FieldMapping集合的编码器/解码器,因为这是我想要转换为json字符串的内容