簡體   English   中英

No instance of play.api.libs.json.Format is available for scala.Option[java.sql.Timestamp] in the implicit scope

[英]No instance of play.api.libs.json.Format is available for scala.Option[java.sql.Timestamp] in the implicit scope

我對 scala 和 play.api.libs.json.Format 完全陌生。

這是我的代碼,我不知道我在哪里做錯了。



import java.sql.Timestamp
import shapeless._
import slickless._
import play.api.libs.json._


case class AnnotationDto(
                          sequence: Int,
                          tagName: String,
                          value: String,
                        ) {
  require(!tagName.isEmpty, "annotation tagName must not be empty")
}

case class CommentDto(
                       commentText: String,
                     ) {
  require(!commentText.isEmpty, "commentText must not be empty")
}

case class LoanConditionDto(
                             conditionGuid: String,
                             sourceSystemId: String,
                             sourceType: String,
                             name: String,
                             descriptionTemplate: String,
                             description: String,
                             status: String,
                             priorTo: String,
                             owner: String,
                             category: String,
                             borrowerFacingName: Option[String] = None,
                             borrowerFacingDescriptionTemplate: Option[String] = None,
                             borrowerFacingDescription: Option[String] = None,
                             encompassGuid: Option[String] = None,
                             conditionStatusDateTime: Option[java.sql.Timestamp] = None,
                             ignoreRecoveryFlag: Option[Boolean] = Some(false),
                             annotations: Option[List[AnnotationDto]] = None,
                             comments: Option[List[CommentDto]] = None,
                           ) {
  require(!conditionGuid.trim.isEmpty, "conditionGuid must not be empty")
  require(!sourceType.trim.isEmpty, "condition sourceType must not be empty")
  require(!name.trim.isEmpty, "condition name must not be empty")
  require(!description.trim.isEmpty, "condition description must not be empty")
  require(!status.trim.isEmpty, "condition status must not be empty")
  require(!priorTo.trim.isEmpty, "condition priorTo must not be empty")
  require(!owner.trim.isEmpty, "condition owner must not be empty")
  require(!category.trim.isEmpty, "condition category must not be empty")
}

case class LoanConditionUpdateDto (
  conditionGuid: String,
  encompassGuid: Option[String] = None,
  conditionStatusDateTime: Option[java.sql.Timestamp] = None,
  ignoreRecoveryFlag: Option[Boolean] = Some(false),
) {
    require(!conditionGuid.trim.isEmpty, "conditionGuid must not be empty")

}

case class LoanConditionsDto(loanNumber: Option[String] = None, conditions: List[LoanConditionDto], userId: String)

case class LoanConditionsUpdateDto(loanNumber: Option[String] = None, conditions: List[LoanConditionUpdateDto], userId: String)

object AnnotationDto {

  implicit val annotationFormat = Json.format[AnnotationDto]
}

object CommentDto {
  implicit val commentFormat = Json.format[CommentDto]
}

object LoanConditionDto {

  implicit val loanConditionFormat = Json.format[LoanConditionDto]
}

object LoanConditionUpdateDto {
  implicit val loanConditionUpdateFormat = Json.format[LoanConditionUpdateDto]
}

object LoanConditionsDto {
  implicit val loanConditionsFormat = Json.format[LoanConditionsDto]
}

object LoanConditionsUpdateDto {
  implicit val loanConditionsUpdateFormat = Json.format[LoanConditionsUpdateDto]
}

我正在嘗試將項目 object 序列化為 JSON 字符串。 我在這個地方收到錯誤

object LoanConditionDto {

  implicit val loanConditionFormat = Json.format[LoanConditionDto]
}

錯誤:

No instance of play.api.libs.json.Format is available  for scala.Option[java.sql.Timestamp] in the implicit scope (Hint: if declared in the same file, make sure it's declared before)

誰能幫我解決錯誤。

提前致謝

As correctly was suggested in comment section you need to define Format or Writes and Reads for JSON for java.sql.Timestamp , for instance render it as long value representing unix time. 你可以這樣做:

import play.api.libs.json._
import java.sql.Timestamp
import play.api.libs.functional.syntax._

object LoanConditionDto {
  implicit val timestampReads: Reads[Timestamp] = {
      implicitly[Reads[Long]].map(new Timestamp(_))
  }

  implicit val timestampWrites: Writes[Timestamp] = {
    implicitly[Writes[Long]].contramap(_.getTime)
  }

  implicit val loanConditionFormat = Json.format[LoanConditionDto]
}

Scatie 工作示例: https://scastie.scala-lang.org/Ko07Oa8iScW0i4vzE76K7w

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM