use*_*260 2 scala spray spray-json
我有一个函数,它将采用某种类型的参数,将该参数转换为Json然后返回它.这里的问题是我的函数不能在参数上调用.toJson,因为它不知道它.
例:
def convertToJson[A](toConvert: A): JsValue =
toConvert.toJson
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但我想知道我怎么能做出类似这项工作的东西?我怎么能推广这个函数来处理我所有可序列化的案例类?我可以添加一些统一类型,允许此函数接受所有可序列化的案例类.
如果需要更多信息或需要更好的解释,请告诉我.
该toJson方法由隐式扩展提供PimpedAny,您必须导入该扩展:
import spray.json._
def convertToJson // ...
Run Code Online (Sandbox Code Playgroud)
然后,spray-json使用spray.json.JsonWriter[A]类型类来确定可序列化的内容.你必须提供证据,证明你A可以被视为一个JsonWriter[A].有两种方法可以做到这一点:
def convertToJson[A: JsonWriter](toConvert: A): JsValue =
toConvert.toJson
Run Code Online (Sandbox Code Playgroud)
和
def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue =
toConvert.toJson
Run Code Online (Sandbox Code Playgroud)
前者是后者的语法糖.
更新:
您也可以跳过toJson扩展名并JsonWriter直接使用:
def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue =
writer.write(toConvert)
Run Code Online (Sandbox Code Playgroud)
这究竟toJson是做什么的.