遇到的问题
因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换。如下
case class Book (author: String, content: String, id: String, time: Long, title: String)
val json = "{\"author\":\"hll\",\"content\":\"ES即etamsports\",\"id\":\"693\",\"time\":1490165237200,\"title\":\"百度百科\"}"
val mapper: ObjectMapper = new ObjectMapper()
val book: Book = mapper.readValue(json, classOf[Book])
结果抛出了异常:com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class JsonTest$Book]
换成fastjson也会有相似的异常。
恍然大悟,case class没有空参构造函数,跟fastjson这些库不太兼容。
解决办法
然而又不想就java class,然后就找到了json4s-jackson,可以完美兼容scala的case clas