Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Scalatra与Java8 LocalDateTime结合使用_Scala_Datetime_Jackson_Scalatra_Json4s - Fatal编程技术网

如何将Scalatra与Java8 LocalDateTime结合使用

如何将Scalatra与Java8 LocalDateTime结合使用,scala,datetime,jackson,scalatra,json4s,Scala,Datetime,Jackson,Scalatra,Json4s,我们正在使用Scalatra 2.4和JacksonJsonSupport 3.3,序列化Java8 LocalDateTime时遇到问题。由于“没有LocalDateTime类型的构造函数,JObject(List())”而失败 我尝试了一系列的搜索来寻找解决方案;有很多关于使用JSR-310 ObjectMapper的参考。但是,我还没有找到一种将此映射器与Scalatra一起使用的方法 有人能给出一个关于如何使用Scalatra的Json支持序列化Java8日期时间格式的指针吗 谢谢 以下

我们正在使用Scalatra 2.4和JacksonJsonSupport 3.3,序列化Java8 LocalDateTime时遇到问题。由于“没有LocalDateTime类型的构造函数,JObject(List())”而失败

我尝试了一系列的搜索来寻找解决方案;有很多关于使用JSR-310 ObjectMapper的参考。但是,我还没有找到一种将此映射器与Scalatra一起使用的方法

有人能给出一个关于如何使用Scalatra的Json支持序列化Java8日期时间格式的指针吗

谢谢

以下是我希望的当前代码的相关部分。我已经包括了招摇过市的东西,以防它是相关的。如果还需要什么,请告诉我

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
    }
  }
}

看起来您正在使用它进行格式化。你看过他们是如何支持你的吗?它们似乎不直接支持Java8的
java.time
,但它应该非常类似于。将以下内容添加到您的范围对我很有效:

 object LocalDateTimeSerializer extends CustomSerializer[LocalDateTime](format => (
{
  case JString(d) => LocalDateTime.parse(d, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
  case JNull => null
},
{
  case x: LocalDateTime => JString(x.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
}
))

implicit val formats = Serialization.formats(NoTypeHints) + LocalDateTimeSerializer`

请给我们一些代码。按要求添加代码