Scala Jackson对象映射器在case类中设置null而不是默认值

时间:2014-10-01 07:35:09

标签: json scala jackson mapper

有一个具有默认参数的案例类Person。

向mapper传递一个缺少param的字符串,mapper将其设置为null。

希望它设置默认值

为什么会这样?

示例:

@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("")
     }
  }
}

得到错误:

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

2 个答案:

答案 0 :(得分:0)

Jackson mapper正在使用反射来设置属性并忽略case类构造函数中的默认值。 有一个开放的ticket,似乎评论中建议的解决方案不起作用

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

答案 1 :(得分:0)

使用@JsonCreator批注:

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