如何在json值上应用自定义验证

时间:2019-01-08 06:31:34

标签: json scala validation

我有一个通过api传入的json数据。我有一套策略,需要对即将到来的json数据进行验证。

例如,我有一个json

{
"users_id":"x",
"is_user_logged_in":"true",
"checkin_date":"2018-12-12",
"checkout_date":"2019-12-13"
}

现在,我想应用checkin_date之类的验证应小于checkout_data,或者假设is-user_logged_in为真,则user_id不应该为null。

我无法反序列化json,因为我需要将其传递给其他应用程序以使用

我正在使用Scala的任何想法,我如何实现这一点。问题是我可能需要验证多个策略或规则,而我只能在运行时获取规则。

谢谢

1 个答案:

答案 0 :(得分:1)

最简单的方法是将验证添加到默认构造函数,然后仅使用JSON解析器作为验证器(无需使用解析的数据):

import java.time.LocalDate

case class UserData(
  user_id: Option[String],
  is_user_logged_in: Boolean,
  checkin_date: LocalDate,
  checkout_date: LocalDate
) {
  require(!is_user_logged_in || user_id.isDefined, "missing `user_id` for logged in user")
  require(checkout_date.isAfter(checkin_date), "`checkout_date` should be after `checkin_date`")
}

对于更复杂的情况,请考虑使用一些方便的验证库,例如:

https://github.com/jto/validation

相关问题