使用 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)))
我有一个案例 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)))