所以,我剛剛開始學習Scala。對不起,我提前無能。Play2.2.1框架中的Json Scala對象序列化
我試圖在stackoverflow上查找我的答案。我能找到幾個相關的主題,但我沒有發現我的問題。
我想發送一個基於Scala對象的json響應。我有一個動作,我做了以下內容:
def oneCredential = Action {
val cred = Credential("John", "Temp", "5437437")
Ok(Json.toJson(cred))
}
我已經創造了它
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.libs.json.util._
case class Credential(name: String, account: String, password: String)
object Credential{
implicit val credentialWrites = (
(__ \ "name").write[String] and
(__ \ "account").write[String] and
(__ \ "password").write[String]
)(Credential)
}
當我試圖運行這個案例類和適當的隱寫操作[T] ,我有以下錯誤:「重載的方法值[適用]不能應用於(models.Credential.type)」。另外,我試過這個
implicit val credentialWrites = (
(__ \ "name").write[String] and
(__ \ "account").write[String] and
(__ \ "password").write[String]
)(Credential.apply _)
失敗。錯誤:無法找到參數賦內含價值:play.api.libs.functional.Functor [play.api.libs.json.OWrites]
那麼這個:
implicit val credentialWrites = (
(__ \ "name").writes[String] and
(__ \ "account").writes[String] and
(__ \ "password").writes[String]
)(Credential)
另一個失敗:「值寫入不是play.api.libs.json.JsPath的成員注意:隱式值credentialWrites在此處不適用,因爲它在應用程序點之後,並且缺少顯式結果類型「。對,我瞭解錯誤的第一部分,但不是第二部分。
最後,我發現了一個簡便的解決方案:
implicit val credentialWrites = Json.writes[Credential]
有了這個我沒有錯誤,代碼終於奏效。我在blog上找到了解決方案。據說速記形式與上面「寫」的形式完全相同。但是這個「長」形式對我來說並不適用。
爲什麼速記版本工作,而長文件不工作?有人可以解釋這一點嗎?
謝謝!
PS版斯卡拉:2.10.2
非常感謝。 – Semuserable