logger.error(“string”,e)使用future和async时在scala-play中不起作用

时间:2016-01-12 15:24:46

标签: scala logging playframework-2.0 error-logging

我收到错误 for logger.error(“string”,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))))))
  }
}
}

我想从此记录错误!

1 个答案:

答案 0 :(得分:1)

在将来使用recover时,您需要返回与原始未来相同(ish)类型的值。

  formatsFuture.recover {
    case e: Throwable => {
      BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
      logger.error("asd",e)
    }
  }

块中的最后一个值是返回值。由于这是对logger.error的调用,编译器认为您返回的值Unit不符合recover的要求。

应该切换订单以便返回BadRequest

  formatsFuture.recover {
    case e: Throwable => {
      logger.error("asd",e)
      BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))          
    }
  }