2
我有一個播放框架控制器方法,根據請求標頭返回一個字節數組或字符串。這裏是什麼樣子:播放框架異步響應錯誤
def returnResponse = Action(parse.anyContent) {
request =>
println(request.body)
val buffer: RawBuffer = request.body.asRaw.get
val js: String = buffer.asBytes() match {
case Some(x) => new String(x, "UTF-8")
case None => scala.io.Source.fromFile(buffer.asFile).mkString
}
val resultJsonfut = scala.concurrent.Future { serviceCall.run(js) }
Async {
resultJsonfut.map(s => {
val out = if(request.headers.toSimpleMap.exists(_ == (CONTENT_ENCODING, "gzip"))) getBytePayload(s) else s
Ok(out)
})
}
}
我沒有看到任何的IntelliJ錯誤,但是當我編譯時,出現以下錯誤:
Cannot write an instance of java.io.Serializable to HTTP response. Try to define a Writeable[java.io.Serializable]
這是爲什麼?但是,如果我修改它看起來像下面一樣:
Async {
if(request.headers.toSimpleMap.exists(_ == (CONTENT_ENCODING, "gzip"))) {
resultJsonfut.map(s => Ok(getBytePayload(s)))
} else {
resultJsonfut.map(s => Ok(s))
}
}
它編譯得很好。任何理由爲什麼這樣表現?
所以在這種情況下任何不是可序列化的,並且它爲什麼失敗的原因! – sparkr