我有这些case
课程:
case class Role(name: String)
case class User(id: Int, firstName: String, lastName: String, role: Role)
像这样的控制器:
class MyController @Inject() (cc: ControllerComponents) extends AbstractController(cc) {
def user = Action {
val user = User(1, "Petr", "Petrov", Role("USER"))
val userJson = Json.toJson(user)
println(userJson)
Ok(userJson)
}
}
根据文档,如果 User 类没有嵌套,那么我可以这样做:
implicit val userWrites = Json.writes[User]
val userJson = Json.toJson(user)
Ok(userJson)
但是由于 我在对象role
中有对象user
,它不起作用。
如何正确处理嵌套对象?
首先为嵌套类型声明一个转换器,然后为外部类型声明一个转换器 - 在这种情况下,当变量
userWrites
被初始化时,它已经在范围内拥有所有必要的转换器:一般来说,我建议您在类本身的伴随对象中编写转换器,在这种情况下,您不需要不断地将它们导入范围 - 例如,如果您在不同的控制器中转换为 JSON。
像这样: