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