使用 Play JSON 库构建 Json 时使用抽象类

mva*_*rle 5 json scala playframework playframework-2.0

我正在尝试想出一种很好的方法来为我想要从 Play 应用程序到其他服务的某些 api 调用构建我的 json。

我在尝试创建一个我想包含在我的案例类中的抽象类时遇到了一个问题。我有一个通用的 Request 对象,并希望在其中包含 Parameter 对象,Login 是 Parameters 对象的一个​​示例,但内容可能会有所不同。

我尝试创建一个伴随对象,使用 trait 而不是抽象类,并尝试实现手动 Writer 对象而不是使用“inception”方法,但是我无法让类型系统做我想做的事,文档也没有t 描述我正在尝试做什么。

package sandbox

import play.api.libs.json._
import play.api.libs.functional.syntax._

object JsonTest {
    abstract class Parameters

    case class Request(
        interface: String,
        method: String,
        parameters: Parameters
    )

    case class Login(username: String, password: String) extends Parameters

    implicit val loginWrites = Json.writes[Login]
    implicit val requestWrites = Json.writes[Request]

    val login = Login("user1", "pass1")
    val request = Request("interface1", "method1", login)
    val requestJS = Json.toJson(request)
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段正确地抱怨它没有参数的编写器,制作这样的东西的最干净的方法是什么?