找不到案例类的 JsonWriter 或 JsonFormat 类型类
Posted
技术标签:
【中文标题】找不到案例类的 JsonWriter 或 JsonFormat 类型类【英文标题】:Cannot find JsonWriter or JsonFormat type class for a case class 【发布时间】:2015-03-18 09:57:11 【问题描述】:按照http://www.smartjava.org/content/first-steps-rest-spray-and-scala 的教程,有一些意外的错误消息。到底是怎么回事?我是否通过 implicit val personFormat = jsonFormat3(Person)
调用定义了隐式 JsonWriter?
scala> import spray.json.DefaultJsonProtocol
import spray.json.DefaultJsonProtocol
scala> object MyJsonProtocol extends DefaultJsonProtocol
implicit val personFormat = jsonFormat3(Person)
| | defined object MyJsonProtocol
scala> case class Person(name: String, fistName: String, age: Long)
defined class Person
scala> import spray.json._
import spray.json._
scala> import MyJsonProtocol._
import MyJsonProtocol._
scala> Person(name="a", fistName="b", age = 10).toJson
<console>:45: error: Cannot find JsonWriter or JsonFormat type class for Person
Person(name="a", fistName="b", age = 10).toJson
^
【问题讨论】:
【参考方案1】:从您的会话看来,好像您在声明 Person
类之前定义了协议,这意味着您已经有另一个 Person 类在范围内。定义协议后,您重新定义Person
类,因此无法找到格式。所以总结一下,请确保您首先声明您的Person
类,然后定义您的格式。
编辑:更新答案
【讨论】:
尝试了许多不同的导入,包括这些,但错误消息仍然存在。我编辑了问题。 如果我在声明协议之前执行新会话并声明Person
类,则会话成功(它返回 Person(name="a", fistName="b", age = 10).toJson
)。所以我假设,您实际上是在声明格式之前声明了 Person
类?
你是对的!我尝试了不同的课程并且它有效!将其添加到答案中,我会接受...
当类位于多个文件中并且我使用 sbt 编译它们时,情况会变得更糟。似乎它们是按字母顺序编译的,忽略了导入...
我不确定我是否理解。您能否发布一个演示问题的最小示例(可能是一个要点以避免编辑问题)或提出一个新问题?以上是关于找不到案例类的 JsonWriter 或 JsonFormat 类型类的主要内容,如果未能解决你的问题,请参考以下文章
spray-json 找不到 List[T] 类型的 JsonReader
Class org.apache.struts2.json.JSONWriter can not access a member of
struts2 java.lang.StackOverflowError org.apache.struts2.json.JSONWriter
Newtonsoft.Json序列化和反序列之javascriptConvert.SerializeObject,DeserializeObject,JsonWriter,JsonReader(示例代