我使用Scala json序列化器,发现它没有为反序列化的案例类设置默认值,而是将这些缺失值设置为null。
幸运的是,直到现在它并没有对我的系统造成多大的损害,主要是因为CRUD只将字段设置为null,但是在将来,我绝对想要强制我的JSON有效负载没有任何空值。
我的Json有效负载通常是某种带有列表和原语的case类树。
它通常非常简单,例如case class Person(addresses: List[Address], name: String, ...)
case class Address(street: String, number: Int)
...
我猜这与Product
特质有关,但并不知道从哪里开始。
答案 0 :(得分:1)
您可以在案例类中添加要求,因此序列化将失败:
case class Person( name: String,
ssn: String,
homePhone: Option[Long],
cellPhone: Option[Long]){
require(homePhone.isDefined || cellPhone.isDefined, "Person requires at least one phone number")
require(ssn.length() == 9 && ssn.forall(Character.isDigit(_)), "ssn must be a String of 9 digits")
}
答案 1 :(得分:0)
可以这是一个解决方案吗?
def isCaseClassEmpty(product: Product): Boolean =
product.productIterator.forall {
case None => true
case Some(x: Product) => isCaseClassEmpty(x)
case _ => false
}
case class Inner(b: Option[Int])
case class Root(a: Option[String]: inner: Option[Inner])
val root = Root(None, None))
isCaseClassEmpty(root) // true
val root = Root(None, Some(Inner(None)))
isCaseClassEmpty(root) // true
val root = Root(None, Some(Inner(Some(5))))
isCaseClassEmpty(root) // false
val root = Root(Some("test"), None)
isCaseClassEmpty(root) // false
干杯: - )