使用ScalaJson序列化解决类型不匹配问题

时间:2014-11-07 19:37:01

标签: json scala serialization playframework playframework-2.0

我有一个控制器类,我已经放置了一个写入对象来序列化我的用户对象。不幸的是,检索user.getId:

时出错
type mismatch; found : Long required: play.api.libs.json.Json.JsValueWrapper 
Note: implicit value userWrites is not applicable here because it comes 
after the application point and it lacks an explicit result type

这是我的代码:

object UsersController extends Controller {   

  implicit val userWrites = new Writes[User] {
    def writes(user: User) = Json.obj(
      "id" -> user.getId,
      "username" -> user.getUsername
    )
  }

  def users = Action { implicit request =>
    Ok(views.html.users()) 
  }
}

我不确定为什么错误说“注意:隐含值userWrites在这里不适用......”,因为如果我摆脱了user.getId部分,错误就会消失。

我需要做什么才能摆脱这个错误并为我的User类正确创建一个Writes对象。

1 个答案:

答案 0 :(得分:2)

Java Long不是Scala Long,Play的Scala JSON序列化程序仅支持Scala类型。您可以通过Long2long明确转换:

implicit val userWrites = new Writes[User] {
  def writes(user: User) = Json.obj(
    "id" -> Long2long(user.getId),
    "username" -> user.getUsername
  )
}