使用 Play 2.3 和 Scala 2.11.1 将具有枚举属性的 class 转换为 Json 时出错

Error in converting class with enum attribute to Json with Play 2.3 and Scala 2.11.1

我有一个案例 class User,其属性之一是 Enum

我想使用 Play-Json api 将此 class 转换为 Json,但出现错误 这是我的用户 class

case class User ( name : String= "", id : String = "", status : UserStatus = ACTIVE)

object User{

implicit val userFmt = Json.format[User]

}

用户状态

 object UserStatus extends Enumeration {
    type  UserStatus = Value
         val ACTIVE , INACTIVE , BLOCKED , DELETED = Value

         implicit val statusFmt = Json.format[UserStatus]  
  }

它让我在用户 class

中出现以下错误

No implicit format for UserStatus available

这一行

implicit val userFmt = Json.format[User]

UserStatus(枚举)出现以下错误

No unapply function found

这一行

implicit val statusFmt = Json.format[UserStatus] 

请帮帮我!

您只需要一个枚举格式化程序。我已经使用 this 重写了您的示例,作为编写格式化程序的一种方式:

  import play.api.libs.json._
    object UserStatus extends Enumeration {
      type  UserStatus = Value
      val ACTIVE , INACTIVE , BLOCKED , DELETED = Value
    }



    case class User ( name : String= "", id : String = "", status : UserStatus.UserStatus = UserStatus.ACTIVE)

    object User{
      implicit val myEnumFormat = new Format[UserStatus.UserStatus] {
        def reads(json: JsValue) = JsSuccess(UserStatus.withName(json.as[String]))
        def writes(myEnum: UserStatus.UserStatus) = JsString(myEnum.toString)
      }

      implicit val userFmt = Json.format[User]

    }

    println(Json.toJson(User("1", "2", UserStatus.ACTIVE)))