有一个具有默认参数的案例类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 ''
答案 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,"")
}