Wir verwenden Scalatra 2.4 mit JacksonJsonSupport 3.3 und haben Probleme bei der Serialisierung von Java8 LocalDateTime. Es ist fehlgeschlagen mit "Kein Konstruktor für den Typ LocalDateTime, JObject (List())"Wie benutze ich Scalatra mit Java8 LocalDateTime
Ich habe eine Reihe von Suchanfragen versucht, um eine Auflösung zu finden; mit vielen Verweisen auf den JSR-310 ObjectMapper. Ich habe jedoch keine Möglichkeit gefunden, diesen Mapper mit Scalatra zu verwenden.
Könnte jemand einen Hinweis geben, wie Java8-Datetime-Formate mit Scalatras Json-Unterstützung serialisiert werden?
Danke.
Hier ist, was ich hoffe, ist die relevanten Abschnitte des aktuellen Codes. Ich habe die Swagger-Sachen für den Fall, dass es relevant ist, hinzugefügt. Wenn etwas anderes benötigt wird, lass es mich wissen.
case class EchoPayload(
message: String,
author: String,
createdAt: LocalDateTime
)
class EchoController(val dataSource: EchoDataSource) {
def findById(echoId: Int): Try[EchoPayload] = {
dataSource.findById(echoId).map { echo =>
EchoPayload(echo.message, echo.author.getOrElse("anon"), echo.createdAt)
}
}
}
trait BaseRoute extends ScalatraServlet with JacksonJsonSupport with BaseSwagger {
override protected implicit val jsonFormats = DefaultFormats.withBigDecimal
before() {
contentType = formats("json")
}
// Error handler, errors translated to Scalatra error ActionResults
error {
case bre: BadRequestException => BadRequest(ErrorPayload(bre))
case nfe: NotFoundException => NotFound(ErrorPayload(nfe))
case he: HttpException => InternalServerError(ErrorPayload(he))
case NonFatal(e) => InternalServerError(ErrorPayload(e))
}
}
class EchoRoute(val controller: EchoController) extends BaseRoute {
val getEcho = apiOperation[EchoPayload]("getEcho")
.summary("echo echo echo")
.notes("returns an echo")
.parameters(
pathParam[Int]("echoId").description("id of the echo to return")
)
.responseMessages(
messageOk("success"),
messageBadRequest("invalid echo id"),
messageNotFound("no echo yet"))
get("/:echoId", operation(getEcho)) {
val echoId = Try(params("echoId").toInt).getOrElse(throw new BadRequestException("echoId is required int"))
controller.findById(echoId) match {
case Success(payload) => Ok(payload)
case Failure(e) if e.isInstanceOf[NoEchoException] => throw new NotFoundException(s"No echo at id=$echoId", e)
case Failure(e) => throw e
}
}
}
Bitte zeigen Sie uns einige Code. – legendofawesomeness
Code wie gewünscht hinzugefügt –