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

使用Play Json库构建Json时使用抽象类,json,scala,playframework,playframework-2.0,Json,Scala,Playframework,Playframework 2.0,我正试图找到一种很好的方法来为一些api调用构建json,这些api调用我想从我的Play应用程序到其他服务 我在尝试创建要包含在案例类中的抽象类时遇到了一个问题。我有一个通用的请求对象,并希望在其中包含参数对象,登录是参数对象的一个示例,但内容可能会有所不同 我尝试创建一个伴生对象,使用trait而不是抽象类,并尝试实现手动编写器对象,而不是使用“inception”方法,但是我无法让类型系统完成我想要做的事情,文档也没有描述我要做的事情 package sandbox import pla

我正试图找到一种很好的方法来为一些api调用构建json,这些api调用我想从我的Play应用程序到其他服务

我在尝试创建要包含在案例类中的抽象类时遇到了一个问题。我有一个通用的请求对象,并希望在其中包含参数对象,登录是参数对象的一个示例,但内容可能会有所不同

我尝试创建一个伴生对象,使用trait而不是抽象类,并尝试实现手动编写器对象,而不是使用“inception”方法,但是我无法让类型系统完成我想要做的事情,文档也没有描述我要做的事情

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)
}

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

您可以将
参数
密封
并创建
写入[参数]
。谢谢你指向那篇文章,我不确定这是否能解决我的问题。这似乎是可行的,尽管涉及到更多的样板文件,而且我必须重复Writes[Parameters]块中的所有子类,至少您不能错过
Writes[Parameters]
中的子类。可能重复