如何解决尝试使用 Play Json 添加 json 解析时“无法访问”隐式 val
我有类似的东西:
sealed trait Foo
case class Bar(field: ...) extends Foo
case class Baz(otherField: ...) extends Foo
trait JsonFormat {
implicit val barWrites = Json.writes[Bar]
implicit val barReads = Json.reads[Bar]
implicit val bazWrites = Json.writes[Baz]
implicit val bazReads = Json.reads[Baz]
implicit val fooWrites = Json.writes[Foo]
implicit val fooReads = Json.reads[Foo]
// other vals that depend on Foo
}
编译时出现如下错误:
[error] /file/path/JsonFormat.scala:68:41: unreachable code
[error] implicit val fooWrites = Json.writes[Foo]
[error] ^
[error] one error found
我是 Scala 的新手,我了解模式匹配上下文中的“无法访问的代码”错误,但我无法弄清楚这一点。
我使用的是 play 2.8。
解决方法
这可能不是答案的确切解决方案,而是改变方法的可能建议。
首先,如果您在类的伴生对象中添加自己的 apply()
方法,则会发生此错误。检查一下。
其次,最佳实践似乎是您将一个隐式转换器放在每个类的类的伴随对象中,我会继续隐式格式化程序,以便支持两个转换方向。
case class SomeClass(someString: String)
object SomeClass {
implicit val jsonFormatter: OFormat[SomeClass] = Json.format[SomeClass]
}
如果您以这种方式处理您的 JSON 隐式转换器,那么您在任何使用 DTO 的地方都会自动在您在进出方向使用该类的任何地方获得隐式转换器。
组装“共享”隐式的其他地方是包对象。例如,我保留了一个 ISO DateTime 字符串 日期转换器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。