요청 헤더를 기반으로 바이트 배열 또는 문자열을 반환하는 Play 프레임 워크 컨트롤러 메서드가 있습니다. 여기가 모습입니다 :Play Framework 비동기 응답 오류
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))
}
}
잘 컴파일됩니다. 이런 식으로 행동하는 이유는 무엇입니까?
것 같다 그 경우 Any는 Serializable이 아니며 처음에 실패한 이유입니다! – sparkr