我的play-framework
api服务器中的Json转换问题已经有一段时间了,并且一直在处理繁琐的解决方法。我认为这是一个简单而常见的问题,因此我想一劳永逸地解决它,以便我可以拥有更易于维护的代码
我需要将case class
转换为Json。我一直在努力编写一个jsonify
函数,它一个接一个地返回硬编码的成员变量[太繁琐但工作了]
如何为implicit Format
提供inner case class
?我无法覆盖(并且不知道要覆盖哪种方法,尽管已经反复阅读相关文档)
case class CaseObject (
id: String,
title: String,
createdDate: java.util.Date // here is the problem
) {
}
object CaseObject {
// is this how to override?
// val formatter = new SimpleDateFormat("yyyy-MM-dd")
// implicit object dateWrites extends Writes[java.util.Date] {
// def writes(date: java.util.Date): JsValue = {
// JsString(formatter.format(createdDate))
// }
// }
implicit val CaseObjectFormat = Json.format[CaseObject]
implicit val CaseObjectReads = Json.reads[CaseObject]
implicit val CaseObjectWrites = Json.writes[CaseObject]
implicit val CaseObjectBson = Macros.handler[CaseObject]
// tried circe as well...
private[this] def fmt = new SimpleDateFormat("yyyy-MM-
dd'T'HH:mm:ss.SSSZZ")
implicit val config: Configuration = Configuration.default
implicit val dateEncoder: Encoder[Date] =
Encoder[String].contramap(fmt.format)
implicit val dateDecoder: Decoder[Date] =
Decoder[String].emapTry(str => Try(fmt.parse(str)))
}
请帮助..我已经为这个微不足道的问题搞砸了好几天..提前致谢!
答案 0 :(得分:3)
您需要导入通用日期格式
import play.api.data.format.Formats.dateFormat
implicit val format = dateFormat("yyyy-mm-dd")
答案 1 :(得分:2)
import play.api.libs.json.Json
import java.util.Date
case class CaseObject(
id: String,
title: String,
createdDate: java.util.Date // here is the problem
)
implicit val j = Json.format[CaseObject]
val c = CaseObject("1", "new title", new Date())
println(Json.toJson(c))
我不太明白你的问题。如果它是你想要的,那么这个转换为json。