Scala 生成带有输出日期的JSON
鉴于以下案例类别:Scala 生成带有输出日期的JSON,scala,playframework-2.5,Scala,Playframework 2.5,鉴于以下案例类别: import java.time.LocalDate case class ReportDateVO(reportDate: LocalDate) 我试图定义隐式json格式: implicit val reportDatesWrite : Writes[ReportDateVO] = ( (JsPath \ "dt").write[LocalDate] ) (unlift(ReportDateVO.unapply)) 但我得到了以下错误: 重载方法值,并
import java.time.LocalDate
case class ReportDateVO(reportDate: LocalDate)
我试图定义隐式json格式:
implicit val reportDatesWrite : Writes[ReportDateVO] = (
(JsPath \ "dt").write[LocalDate]
) (unlift(ReportDateVO.unapply))
但我得到了以下错误:
重载方法值,并使用可选项写入:(t:
java.time.LocalDate)(隐式w:
play.api.libs.json.Writes[java.time.LocalDate])play.api.libs.json.OWrites[play.api.libs.json.JsValue]
(b)w:
play.api.libs.json.Writes[java.time.LocalDate])play.api.libs.json.OWrites[java.time.LocalDate]
无法应用于(fdic.ReportDateVO⇒ java.time.LocalDate)
这些替代方案是什么?没有默认格式吗?如何解决这个问题?我正在使用Play2.5.2。PlayJson只为Int、String、Double等基本类型提供序列化程序,LocalDate不在其中 您的想法是正确的,但需要更加具体,首先为LocalDate定义Combinator:
implicit val LocalDateWrites: Writes[LocalDate] = Writes {
(l: LocalDate) => JsString(l.toString())
}
implicit val reportDatesWrite : Writes[ReportDateVO] = (
(JsPath \ "dt").write[LocalDate]
) (unlift(ReportDateVO.unapply))
简而言之,您只能对参数最少为2(最多22)的case类使用JSON组合符。查看文档中的“复杂阅读”部分。组合器对读写操作的作用类似,因此在复杂读部分中的简短解释可能会有所帮助。所以基本上编译器告诉您的是,您不能传递类型为fdic.ReportDateVO的函数⇒ java.time.LocalDate到方法write有点奇怪,因为从逻辑上讲,如果在(JsPath \“dt”).write[LocalDate]周围有括号,它应该返回OWrites[LocalDate]的实例,编译器应该抱怨类型为OWrites[LocalDate]的对象中存在错误的apply方法 我认为最好的替代方法(如果您想要自定义文件名)是手动实现写入[LocalDate]
implicit val reportDatesWrite: Writes[ReportDateVO] = OWrites[ReportDateVO] {
rdvo: ReportDateVO => Json.obj(
"dt" -> DefaultLocalDateWrites.writes(rdvo.reportDate)
)
}
如果字段名可以与case类(reportDate)中的参数名匹配,那么您还可以使用Play helper方法,该方法是使用Scala宏实现的
implicit val reportDatesWrite: Writes[ReportDateVO] = Json.writes[ReportDateVO]
我在ReportDateWrite中也遇到了同样的错误:重载方法值write和可选项:(t:java.time.LocalDate)(隐式w:play.api.libs.json.Writes[java.time.LocalDate])play.api.libs.json.OWrites[play.api.libs.json.JsValue](隐式w:play.api.libs.json.Writes[java.time.LocalDate])play.api.libs.json.OWrites[java.time.LocalDate]无法应用于(fdic.ReportDateVO⇒ java.time.LocalDate)当我尝试使用DefaultLocalDateWrites时,我收到一条错误消息,表示找不到该函数。我正在导入play.api.libs.json.\uu这包括LocalWrites,有什么想法吗?尝试直接导入
import play.api.libs.json.Writes.DefaultLocalDateWrites
。它是play.api.libs.json.DefaultWrites
的一部分,它与play.api.libs.json.Writes
伴生对象混合在一起。或者只导入所有内容play.api.libs.json.Writes.\ucode>