Scalatra 2.4でJacksonJsonSupport 3.3を使用しており、Java8 LocalDateTimeのシリアル化に問題があります。 「LocalDateTime、JObject(List())タイプのコンストラクタがありません」というエラーが表示されますScalatraをJava8で使用する方法LocalDateTime
解決方法を探すために多数の検索を試しました。 JSR-310 ObjectMapperを使用することについて多くの言及があります。しかし、Scalatraでこのマッパーを使う方法は見つけていません。
誰かがScalatraのJsonサポートでJava8 datetime形式をシリアル化する方法に関するポインタを与えることができますか?
ありがとうございました。
ここに、私は現在のコードの関連セクションが欲しいです。私はそれが関連している場合に備えて、甘やかされたものを含めました。他に何かが必要なら私に知らせてください。
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
}
}
}
いくつかのコードを表示してください。 – legendofawesomeness
要求通りにコードを追加しました –