2014-10-01 12 views
5

mają klasę przypadku Osoba z domyślnym parametrem.Scala Jackson obiekt odwzorowujący obiekt ustawienia null zamiast wartości domyślnych w przypadku klasy

przekazuje mapperowi ciąg znaków bez parametrów, mapper ustawia go jako zerowy.

Oczekiwanie na ustawienie domyślnej wartości

dlaczego tak jest?

przykład: błąd

@JsonIgnoreProperties(ignoreUnknown = true) 
case class Person(id:Int,name:String="") 

class MapperTest extends SpecificationWithJUnit { 

    "Mapper" should { 

    "use default param" in { 

     val personWithNoNameString = """{"id":1}""" 

     val mapper = new ObjectMapper(); 
     mapper.registerModule(DefaultScalaModule) 
     val personWithNoName = mapper.readValue(personWithNoNameString,classOf[Person]) 

     personWithNoName.name must be("") 
    } 
    } 
} 

get:

'null' is not the same as '' 
java.lang.Exception: 'null' is not the same as '' 

Odpowiedz

0

Jackson mapper używa odbicie ustawić właściwości i ignoruje wartości domyślne w konstruktorze klasy przypadek. Jest otwarty ticket, i wydaje się, że proponowane rozwiązanie w komentarzach nie działa

case class Person(id:Int,name:String=""){ 
    def this() = this(0,"") 
} 
+0

nie będzie kompilować (oczekiwane Int dostał null) – Nimrod007

+0

zaktualizowane odpowiedź, null.asInstanceOf [Int] jest 0, w przeciwnym wypadku użyj opcji [Int] –

+0

nadal nie działa, uruchomienie testów daje zero – Nimrod007

Powiązane problemy