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