Цирцея, Тапир и JodaTime
У меня есть класс дела вроде
final case class MyClass(id: Long, eventData: EventsDTO)
final case class EventsDTO(
customerId: Long,
eventName: String,
processTime: DateTime //JodaTime
)
У меня есть собственный кодировщик и декодер как
val dateFormatter = DateTimeFormat.forPattern("yyyyMMdd")
implicit def TimestampFormat: Encoder[DateTime] with Decoder[DateTime] =
new Encoder[DateTime] with Decoder[DateTime] {
override def apply(a: DateTime): Json = Encoder.encodeString.apply(a.toString)
override def apply(c: HCursor): Result[DateTime] =
Decoder.decodeString.map(s => DateTime.parse(s, dateFormatter)).apply(c)
}
У меня конечная точка тапира как
val inclusive: Route[Unit, MyClass] =
endpoint.post
.in(Paths.api)
.out(jsonBody[WidgetsResponse])
Но если запустить код выше, я получаю
Error:(71, 15) Cannot find a codec for type: com.Model.MyClass, formatted as: sttp.tapir.CodecFormat.Json.
Did you define a codec for: com.Model.MyClass?
Did you import the codecs for: sttp.tapir.CodecFormat.Json?
Is there an implicit schema for: com.Model.MyClass, and all of its components?
(codecs are looked up as implicit values of type Codec[com.Model.MyClass, sttp.tapir.CodecFormat.Json, _];
schemas are looked up as implicit values of type Schema[com.Model.MyClass])
jsonBody[MyClass]
Error:(71, 15) not enough arguments for method jsonBody: (implicit codec: sttp.tapir.CodecForOptional[com.Model.MyClass, sttp.tapir.CodecFormat.Json, _])sttp.tapir.EndpointIO.Body[com.Model.MyClass, sttp.tapir.CodecFormat.Json, _].
Unspecified value parameter codec.
jsonBody[MyClass]
Может ли кто-нибудь помочь, что я делаю не так?
Если я удалю processTime: DateTime //JodaTime
от EventsDTO
, приложение работает нормально.
1 ответ
Это была недостающая часть
implicit val schemaForDateTime: Schema[DateTime] = Schema(SString)