#scala #akka-http #spray-json #implicit-parameters
Вопрос:
Итак, у меня есть эта простая конечная точка поста, где должна произойти некоторая несогласованность
post {
path("/emails") {
import package.model.impl.RegularEmailJsonSupport._
entity(as[RegularEmail]) { regularEmail =>
storeInboundEmails(regularEmail).runDB.attempt.unsafeRunSync()
}
}
Это класс модели наряду с форматом протокола json, в котором я не очень уверен, что это правильно для поля EmailStatus
case class RegularEmail(
id: BigInt,
timestamp: DateTime,
senderEmailAddress: String,
originalRecipientsAddresses: List[String],
cc: List[String],
subject: String,
content: JsValue,
customerNumber: Int,
status: EmailStatus = EmailStatus.UNREAD,
originalSenderEmailAddress: String,
hasAttachments: Boolean = false
//metadata: Option[EmailMetadata]
) extends Email(
id = id,
timestamp = timestamp,
senderEmailAddress = senderEmailAddress,
originalRecipientsAddresses = originalRecipientsAddresses,
cc = cc,
subject = subject,
content = content,
status = status,
hasAttachments = hasAttachments,
sourceType = EmailSourceType.REGULAR //,
//metadata = metadata
) {
}
object RegularEmailJsonSupport extends DefaultJsonProtocol with SprayJsonSupport {
implicit val eventDataFormat = jsonFormat1(DateTime.apply)
implicit val statusFormat = jsonFormat1(EmailStatus.apply)
implicit val EmailFormat = jsonFormat11(RegularEmail.apply)
}
И вот какие ошибки я получаю
could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller
could not find implicit value for evidence parameter of type RegularEmailJsonSupport.JF[P1] (Cannot find JsonWriter or JsonFormat type class for P1)
[error] implicit val statusFormat = jsonFormat1(EmailStatus.apply)
Я также вижу, что компилятор не жалуется на формат JSON для DateTime, так может ли эта проблема быть спровоцирована статусом электронной почты?
EmailStatus-это объект в абстрактном классе Email, который наследуется обычной почтой и выглядит следующим образом:
object EmailStatus extends Enumeration {
type EmailStatus = Value
val READ, UNREAD, CLOSED = Value
}
Комментарии:
1. Вы видели этот пиар ? github.com/spray/spray-json/pull/336/files
2. Никогда такого не видел, хороший обходной путь, большое спасибо
3. Более эффективный анализ перечислений Scala с использованием spray-json находится здесь