[circe] could not find implicit value for parameter encoder: io.circe.Encoder 해결하기
scala 2019. 10. 6. 22:15scala circe 라이브러리를 사용하다 아래와 같은 에러를 만났다.
could not find implicit value for parameter encoder: io.circe.Encoder[Message]
대충 코드는 이렇다. Message case class를 json으로 변경하는 것이다.
object MessageType extends Enumeration {
type MessageType = Value
val DEL = Value
val INSERT = Value
}
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, Object],
val createdAt: String
)
scala enumeration은 아래와 같이 처리해 주었는데.. 역시 동일한 에러이다.
implicit val decoder: Decoder[MessageType.Value] = Decoder.enumDecoder(MessageType)
implicit val encoder: Encoder[MessageType.Value] = Encoder.enumEncoder(MessageType)
혹시나 circe는 Map의 value type을 중요하게 본다. 역시 에러다
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, Any],
val createdAt: String
)
아래와 같이 value type을 String으로 변경하니 동작한다
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, String],
val createdAt: String
)
경험해보니 최대한 간결한 패턴의 case class를 써야 circe가 잘 동작한다.
'scala' 카테고리의 다른 글
sbt 동작 이상 (0) | 2019.10.21 |
---|---|
[scala] sbt 컴파일 속도 올리기 (0) | 2019.10.21 |
[scala] jackson, ujson (0) | 2019.10.04 |
[펌] [spark] spark graceful하게 종료하는 방법 (0) | 2019.10.02 |
[sbt] spark 프로젝트에서 sbt test 할 때 shutdown hook 에러 제거 (0) | 2019.09.27 |