Playframework Play:最简洁的JSON验证形式
我想问一个关于JSON验证最简洁的方法的问题!框架 在官方的游戏教程中,我找到了关于JSON宏初始的主题。其序列化/反序列化的主要思想看起来相当不错:Playframework Play:最简洁的JSON验证形式,playframework,Playframework,我想问一个关于JSON验证最简洁的方法的问题!框架 在官方的游戏教程中,我找到了关于JSON宏初始的主题。其序列化/反序列化的主要思想看起来相当不错: import play.api.libs.json._ case class Person(name: String, age: Int) object Person{ implicit val personFmt = Json.format[Person] } 但是,如果我想在这里设置一些验证约束,该怎么办?例如,我想接受18-60岁
import play.api.libs.json._
case class Person(name: String, age: Int)
object Person{
implicit val personFmt = Json.format[Person]
}
但是,如果我想在这里设置一些验证约束,该怎么办?例如,我想接受18-60岁?在这种情况下,我是否应该回到标准的写和读
如果要保留所有验证错误,请单击“是”,谢谢。似乎有filter
和filterNot
函数,您可以在其中添加自己的验证错误,但它们最终会像定义读取那样冗长:
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class Person(name: String, age: Int)
object Person{
implicit val personFmt: Reads[Person] = (
(__ \ "name").read[String] and
(__ \ "age").read[Int](Reads.min(18) keepAnd Reads.max(60))
)(Person.apply _)
}
我通常会使用上面更详细的样式定义我的读取
,而写入
则使用Json.Writes[T]
宏,因为我通常不需要约束返回到客户端的内容。我想您正在寻找。例如,您可以按如下方式验证Person实例:
implicit val PersonReads : Reads[Person] = (
(JsPath \ "name").read[String] and
(JsPath \ "age").read[Int](min(18) keepAnd max(60))
)(Person.apply _)
您还可以定义用于隐式转换的自定义格式[Person]
,以及混合使用读取[Person]
和写入[Person]
:
val personReads: Reads[Person] = (
(JsPath \ "name").read[String] and
(JsPath \ "age").read[Int](min(18) keepAnd max(60))
)(Person.apply _)
val personWrites: Writes[Person] = (
(JsPath \ "name").write[String] and
(JsPath \ "age").write[Int]
)(unlift(Person.unapply))
implicit val personFormat: Format[Person] =
Format(personReads, personWrites)
谢谢,就像我以前想的那样,有什么帮助的答案吗?如果是,不要忘记接受其中一个:)