json - scala.Option[java.sql.Timestamp] 在隐式范围内没有可用的 play.api.libs.json.Format 实例
问题描述
我对 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]
}
我正在尝试将项目对象序列化为 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)
谁能帮我解决错误。
提前致谢
解决方案
正如评论部分正确建议的那样,您需要为 JSON定义Format
orWrites
和,例如将其呈现为表示 unix 时间的长值。你可以这样做:Reads
java.sql.Timestamp
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
推荐阅读
- matlab - 设置为动态大小时,Matlab S-Function 崩溃
- python - 让图像多次出现 Pygame
- lisp - Lisp 函数返回一个数字加倍,然后将相同的数字加倍加一
- haskell - 使用 GHC API 编译优化程序
- c# - 将 ui 的子坐标转换为 UI 世界位置
- php - 如何添加自己的评分系统?
- powershell - PowerShell Where-Object 与 Where 方法
- javascript - 谷歌表中的脚本以清除但不删除过滤器
- linux - 编辑 conf 文件并在 dockerfile 中使用 sed 或 awk 更改值?
- scala - Scala函数TypeTag:T在函数中使用类型T