我有一個play-mongojack示例中的scala類。它工作正常。但是,當我試圖在Play ehcache中保存它時,它會拋出NotSerializableException。我怎樣才能讓這個類可序列化?Play 2.2 Scala class serializable for cache
class BlogPost(@ObjectId @Id val id: String,
@BeanProperty @JsonProperty("date") val date: Date,
@BeanProperty @JsonProperty("title") val title: String,
@BeanProperty @JsonProperty("author") val author: String,
@BeanProperty @JsonProperty("content") val content: String) {
@ObjectId @Id @BeanProperty var blogId: String = _
@BeanProperty @JsonProperty("uploadedFile") var uploadedFile: Option[(String, String, Long)] = None
}
object BlogPost {
def apply(
date: Date,
title: String,
author: String,
content: String): BlogPost = new BlogPost(date,title,author,content)
def unapply(e: Event) =
new Some((e.messageId,
e.date,
e.title,
e.author,
e.content,
e.blogId,
e.uploadedFile))
private lazy val db = MongoDB.collection("blogposts", classOf[BlogPost], classOf[String])
def save(blogPost: BlogPost) { db.save(blogPost) }
def findByAuthor(author: String) = db.find().is("author", author).asScala
}
保存到緩存:
var latestBlogs = List[BlogPost]()
Cache.set("latestBlogs", latestBlogs, 30)
它拋出一個異常:
[error] n.s.e.s.d.DiskStorageFactory - Disk Write of latestBlogs failed:
java.io.NotSerializableException: BlogPost
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) ~[na:1.7.0_45]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ~[na:1.7.0_45]
at java.util.ArrayList.writeObject(ArrayList.java:742) ~[na:1.7.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45]
編輯1: 我試圖擴展了可序列化的對象,這是行不通的。編輯2: vitalii的評論適合我。
class BlogPost() extends scala.Serializable {}
重複我的評論在這裏:請嘗試 'class BlogPost(...)extends Serializable {...' – vitalii
btw,對象BlogPost不需要被Serializable來序列化類BlogPost的實例 – vitalii