是否可以使用 Play Framework 2.2 在 Scala 中创建一个通用函数,将任意对象序列化为 JSON,而无需提供编写器或格式化程序?
例如,这个非通用代码将创建一个给定客户的 JSON 响应:
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class Customer(id: Int, name: String)
object scratch {
val p = Customer(1, "n")
//> p : Customer = Customer(1,n)
def createJsonResponseCustomer(data: Customer) = {
implicit val formatter = Json.format[Customer]
Json.obj("success" -> true, "data" -> Json.toJson[Customer](data))
}
createJsonResponseCustomer(p)
//> res0: play.api.libs.json.JsObject = {"success":true,"data":{"id":1,"name":"n"}}
}
为了避免必须为每个不同的对象定义格式化程序,我想创建一个这样的通用函数:
def createJsonResponse[T](data: T) = {
implicit val formatter = Json.format[T]
Json.obj("success" -> true, "data" -> Json.toJson[T](data))
}
但是这种尝试会在No unapply function found
处产生错误Json.format[T]
。
换句话说,这有效:
def getFormatter(c: Customer) = Json.format[Customer]
但这不是:
def getFormatterGeneric[T](c: T) = Json.format[T]
有没有办法解决?