我收到错误 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))))))
}
}
}
我想从此记录错误!
答案 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))))
}
}