Play2.6升级后AnyContentAsMultipartFormData的Writeable定义mdf不存在报错
问题原因
Play 2.6.x版本对play.api.mvc.AnyContentAsMultipartFormData的内部实现做了未完全同步到公开文档的调整:原2.5版本中公开的mdf成员属性被改为私有字段,不再允许外部直接访问,这是编译报错的核心原因。你查阅的公开文档大概率是未更新的旧版本说明,和实际2.6.6的实现存在出入。
解决方案
你可以通过以下两种稳定的方式修改隐式值定义解决问题:
方案1:调用公开方法取值
AnyContent实例内置了公开的asMultipartFormData方法可以直接获取到对应的MultipartFormData实例,修改后的代码如下:
implicit val anyContentAsMultipartFormWritable: Writeable[AnyContentAsMultipartFormData] = { MultipartFormDataWritable.singleton.map(_.asMultipartFormData.get) }
因为AnyContentAsMultipartFormData类型本身就代表存储的是MultipartForm格式数据,所以get调用不会出现空指针异常,可安全使用
方案2:构造参数解构取值
AnyContentAsMultipartFormData的主构造参数本身就是对应的MultipartFormData实例,你可以用模式匹配的方式直接取值,兼容性更强:
implicit val anyContentAsMultipartFormWritable: Writeable[AnyContentAsMultipartFormData] = { MultipartFormDataWritable.singleton.map { case AnyContentAsMultipartFormData(mdf) => mdf } }
内容的提问来源于stack exchange,提问作者Nili Al
相关产品推荐
相关产品推荐

