2015-11-24 2 views
0

Я пытаюсь реализовать неявный конвертер для ДЖЕКСОН картографа в Скале,Scala неявного преобразователь не виден типа

код выглядит следующим образом:

object JacksonSerializer { 
    implicit val mapper = new ObjectMapper() with ScalaObjectMapper 
    mapper.registerModule(DefaultScalaModule) 
    implicit class JacksonDeSerializer(val body: AnyContent) extends AnyVal { 
     def as[T](implicit manifest: Manifest[T]): T = { 
      mapper.readValue(body.asText.get, manifest.runtimeClass.asInstanceOf[Class[T]]) 
     } 
    } 
    implicit class JacksonSerializer(val any: Any) { 
     def toJsonString: String = { 
      val out = new StringWriter 
      mapper.writeValue(out, any) 
      out.toString() 
     } 
    } 
} 

Но когда я попробовать следующее:

import JacksonSerializer.JacksonSerializer 
Ok("{}".toJsonString) 

Я получаю ошибку компиляции:

value toJsonString is not a member of String Ok("{}".toJsonString) 

Пробовал практически все, о чем я могу думать и до сих пор не добился никакого прогресса.

+1

вы не импортировать картограф поэтому попробуйте изменения 'импорт JacksonSerializer._' –

ответ

2

Вы должны вызвать объект ограждающего в отличии от неявного класса внутри него:

object JacksonSerializerHelpers { 
    implicit val mapper = new ObjectMapper() with ScalaObjectMapper 
    mapper.registerModule(DefaultScalaModule) 
    implicit class JacksonSerializer(val any: Any) { 
    def toJsonString(implicit mapper: ObjectMapper): String = { 
     val out = new StringWriter 
     mapper.writeValue(out, any) 
     out.toString() 
    } 
    } 
} 

import JacksonSerializerHelper.JacksonSerializer 
Ok("{}".toJsonString) 
Смежные вопросы