2014-11-23 5 views
0

Я использую Json4s для десериализации сообщений json. У меня есть дела класс какJson4s: проблема при попытке конвертировать Json-атрибут в java.sql.Date

case class A(id: Int, b: Option[java.sql.Date]) 

Всякий раз, когда я пытаюсь преобразовать сообщение JSon в случае класса А, я не получаю ни в качестве значения б

scala> read[A]("""{"id":1,"b":12345}""") 
res2: A = A(1,None) 

scala> read[A]("""{"id":1,"b":"12345"}""") 
res3: A = A(1,None) 

scala> read[A]("""{"id":1,"b":"12/12/2014"}""") 
res4: A = A(1,None) 

Как я могу решить эту проблему

+0

Не датированы сериализованы как 'Long's? –

+0

('java.sql.Date' может не поддерживаться, хотя см. Https://github.com/json4s/json4s/blob/master/ext/src/main/scala/org/json4s/ext/JodaTimeSerializers.scala) –

+0

Да, вы правы. Любая идея, как написать собственный сериализатор :) – mohit

ответ

3

Что-то в этом роде (возможно, вы захотите быть более конкретным с форматами). И затем смешайте эту черту в классах, которые должны иметь доступ к этому настраиваемому сериализатору.

import org.json4s.DefaultJsonFormats._ 

trait JsonFormats { 

    case object DateSerializer extends CustomSerializer[java.sql.Date](format => (
    { 
     case JString(s) => Date.valueOf(s) 
     case JNull => null 
    }, 
    { 
     case d: Date => JString(d.toString()) 
    } 
    ) 
) 

    implicit val json4sFormats = native.Serialization.formats(NoTypeHints) + DateSerializer  
} 
Смежные вопросы