繁体   English   中英

在播放框架中无法在Action.async中找到Writable

[英]Unable to find Writable inside Action.async in play framework

似乎我缺少了一些东西,但这是我得到的(仅张贴相关文章)。 MyService.save返回Future [Option [MyCompany]]的位置。

 def myPost = Action.async(parse.json) { request =>
 val mn = Json.fromJson[MyEntity](request.body)
 mn.map{
   case m : MyEntity => MyService.save(m).map{f=> 
     f.map(mm=> Ok(mm ) ) 
   }

 }.recoverTotal {
    e => Future { BadRequest("Detected error:" + JsError.toFlatJson(e)) }
 }


 }

虽然我已经定义

implicit val companyWriter: Writes[MyCompany] = (...)

而这个隐式在范围内,它显示了编译错误

 Cannot write an instance of MyCompany to HTTP response. Try to define 
 a Writeable[MyCompany]

仅供参考:我在其他从事Json.toJson(myCompany)的地方都使用过该作家,因此在该作者中发现并可以正常工作。 特别要注意异步丢失吗?

编辑似乎Ok()方法无法确定MyCompany需要转换为json。 以下似乎有效。

Ok(Json.toJson(mm) )

这是因为对Ok的论点会有所不同吗? 另外,以上代码中的“地图”过多。 有什么建议可以改进并使其更简洁吗?

您的编译器错误是关于Writeable而不是Writes Writeables用于将所有内容转换为可以写入HTTP响应的内容, Writes用于将对象编组为JSON。 名称可能会有些混乱。

至于风格...

def myPost = Action.async(parse.json) { request =>
  request.body.validate[MyEntity] map { myEntity =>

    MyService.save(myEntity).map { maybeCompany =>

      maybeCompany match {
        case Some(company) => Ok(Json.toJson(company))
        case None          => NoContent // or whatever's appropriate
      }

    }

  } recoverTotal { t =>
    Future { BadRequest("Detected error: " + JsError.toFlatJson(e)) }
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM