[英]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.