2015-09-16 60 views
2

我有一個案例類UserEnum作爲其屬性之一錯誤與枚舉屬性類轉換成JSON與播放2.3和Scala 2.11.1

我想用Play-Json API這個類轉換爲Json但我收到錯誤 這裏是我的User類

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] 
    } 

它給了我在User類以下錯誤

爲UserStatus可用

在這條線

implicit val userFmt = Json.format[User] 

和下面的錯誤在UserStatus(ENUM)無隱格式

找不到應用功能

在這條線

implicit val statusFmt = Json.format[UserStatus] 

請幫幫我!

回答

2

您只需要一個格式化程序爲您的枚舉。我已經重寫使用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))) 
+0

有沒有辦法在父類中添加一個格式,並在子類中使用它爲好,再加上如果我有一個特質和4 5個子類如何確保這些格式化程序的代碼可重用性? –

+0

前段時間我嘗試使用特徵來存儲格式化程序,最後它變得混亂。目前我宣佈他們的對象。而且,無論何時需要另一個對象的格式化器,都可以在對象的開頭導入它們。你怎麼看? –