我有一个基类,我继承了我的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类的成功和消息字段。
是否可以使用此功能,还是必须手动写出我的写入格式化程序?
答案 0 :(得分:1)
JSON reads
和writes
宏分别使用案例类的apply
和unapply
方法。他们不仅仅是读写班上的所有成员。通过继承,你的类基本上是这样的:
case class UserResponse(var userId: Int, var name: String) {
var success: Boolean = false
var message: String = ""
}
宏只会选择userId
和name
成员。解决这个问题并使用宏的一种(一种丑陋的)方法是从抽象类中删除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
。
也就是说,除了使用变量之外,可能有更好的方法来完成所有这些,但如果没有更多的背景,很难说出什么。