扩展抽象类时,Json写似乎不起作用

时间:2014-11-23 22:59:16

标签: json scala playframework playframework-json

我有一个基类,我继承了我的case类,当我使用常规的Json.writes时,它似乎不包含继承的字段。

implicit val userResponseWrites = Json.writes[UserRespopnse]

case class UserResponse(var userId: Int, var name: String) extends BaseResponse

abstract class BaseResponse(var success: Boolean = false, var message: String = "")

然后json响应不包含BaseResponse类的成功和消息字段。

是否可以使用此功能,还是必须手动写出我的写入格式化程序?

1 个答案:

答案 0 :(得分:1)

JSON readswrites宏分别使用案例类的applyunapply方法。他们不仅仅是读写班上的所有成员。通过继承,你的类基本上是这样的:

case class UserResponse(var userId: Int, var name: String) {
   var success: Boolean = false
   var message: String = ""
}

宏只会选择userIdname成员。解决这个问题并使用宏的一种(一种丑陋的)方法是从抽象类中删除getter / setter,并让case类定义它们:

abstract class BaseResponse(success: Boolean, message: String)
case class UserResponse(var userId: Int, var name: String, var success: Boolean = false, var message: String = "") 
    extends BaseResponse(success, message)

我看到的唯一其他选择是为每个类手动定义Writes

也就是说,除了使用变量之外,可能有更好的方法来完成所有这些,但如果没有更多的背景,很难说出什么。