Search code examples
jsonscalaenumsplayframework-2.3play-json

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


i have a case class User with an Enum as one of its attributes

i want to convert this class into Json using Play-Json api but i am getting error here is my User class

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

object User{

implicit val userFmt = Json.format[User]

}

UserStatus

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

         implicit val statusFmt = Json.format[UserStatus]  
  }

it gives me following error in User class

No implicit format for UserStatus available

on this line

implicit val userFmt = Json.format[User]

and following error in UserStatus(enum)

No unapply function found

on this line

implicit val statusFmt = Json.format[UserStatus] 

please help me!


Solution

  • You only needed a formatter for your enum. I have rewritten your example using this as a way to write the formatter:

      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)))