logger.error("string",e) 使用 future 和 async 时无法在 scala-play 中工作
logger.error("string",e) Not working in scala-play while using future and async
我遇到了错误
对于 logger.error ( "字符串", e )
类型单元的表达式不符合预期类型 _U
代码如下
object DataFormatController extends Controller {
val logger: Logger = Logger("Data Format Controller")
val dataFormatDao = new DataFormatDao(Global.cassandraSession, Global.getKeyspace)
def listFormats(companyId: Option[String], userId: Option[String]) = Action.async(parse.anyContent){
import play.api.libs.concurrent.Execution.Implicits.defaultContext
implicit request =>
val json = Json.obj("company_id" -> companyId, "user_id" -> userId)
val reqResult = json.validate[ListDataFormatRequest](listFormatReads)
reqResult match {
case s: JsSuccess[ListDataFormatRequest] =>
val formatsFuture = dataFormatDao.findAllAsync(s.get.companyId).map(f => {
val res = f.map(x => {
new ListDataFormat(x.format, x.id)
})
Ok(Json.obj("status" -> 1, "data" -> Json.toJson(res)))
})
formatsFuture.recover {
case e: Throwable => {
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
logger.error("asd",e)
}
}
case e: JsError => Future(BadRequest(Json.toJson(
Response(0, errorMessage = Some(Utils.convertToReadableMessage(e))))))
}
}
}
我想记录这个错误!
当您在未来使用 recover
时,您需要 return 一个与原始未来相同(大概)类型的值。
formatsFuture.recover {
case e: Throwable => {
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
logger.error("asd",e)
}
}
块中的最后一个值是 return 值。由于这是对 logger.error
的调用,编译器认为您正在 returning 值 Unit
,这不满足 recover
.
的要求
应调换顺序,使 BadRequest
为 returned:
formatsFuture.recover {
case e: Throwable => {
logger.error("asd",e)
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
}
}
我遇到了错误 对于 logger.error ( "字符串", e )
类型单元的表达式不符合预期类型 _U
代码如下
object DataFormatController extends Controller {
val logger: Logger = Logger("Data Format Controller")
val dataFormatDao = new DataFormatDao(Global.cassandraSession, Global.getKeyspace)
def listFormats(companyId: Option[String], userId: Option[String]) = Action.async(parse.anyContent){
import play.api.libs.concurrent.Execution.Implicits.defaultContext
implicit request =>
val json = Json.obj("company_id" -> companyId, "user_id" -> userId)
val reqResult = json.validate[ListDataFormatRequest](listFormatReads)
reqResult match {
case s: JsSuccess[ListDataFormatRequest] =>
val formatsFuture = dataFormatDao.findAllAsync(s.get.companyId).map(f => {
val res = f.map(x => {
new ListDataFormat(x.format, x.id)
})
Ok(Json.obj("status" -> 1, "data" -> Json.toJson(res)))
})
formatsFuture.recover {
case e: Throwable => {
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
logger.error("asd",e)
}
}
case e: JsError => Future(BadRequest(Json.toJson(
Response(0, errorMessage = Some(Utils.convertToReadableMessage(e))))))
}
}
}
我想记录这个错误!
当您在未来使用 recover
时,您需要 return 一个与原始未来相同(大概)类型的值。
formatsFuture.recover {
case e: Throwable => {
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
logger.error("asd",e)
}
}
块中的最后一个值是 return 值。由于这是对 logger.error
的调用,编译器认为您正在 returning 值 Unit
,这不满足 recover
.
应调换顺序,使 BadRequest
为 returned:
formatsFuture.recover {
case e: Throwable => {
logger.error("asd",e)
BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
}
}