squbs校验为数据校验提供Spray指令,通过使用 Accord Validation Library。因为Spray指令目前只支持Scala,目前的squbs版本没有对Java代码的支持。
依赖
在你的build.sbt或scala构建文件中添加如下依赖:
"org.squbs" %% "squbs-pattern" % squbsVersion
用法
在作用域中提供一个隐式Person
校验器, validate
指令可以用作其他Spray 指令:
import ValidationDirectives._
validate(person) {
...
}
例子
这里有一个 Person
类的例子和相对应的校验器(请看Accord Validation Library获取更多的校验器用法例子)
case class Person(firstName: String, lastName: String, middleName: Option[String] = None, age: Int)
object SampleValidators {
import com.wix.accord.dsl._
implicit val personValidator = com.wix.accord.dsl.validator[ Person ] { p =>
p.firstName as "First Name" is notEmpty
p.lastName as "Last Name" is notEmpty
p.middleName.each is notEmpty // If exists, should not be empty.
p.age should be >= 0
}
}
现在你可以使用validate
指令如下:
def route =
path("person") {
post {
entity(as[Person]) { person =>
import ValidationDirectives._
validate(person) {
respondWithMediaType(`application/json`) {
complete {
person
}
}
}
}
}
}
如果一个校验拒绝发生时,400 Bad Request
将与包含逗号分隔的引起校验拒绝的字段列表的响应报文一起返回。使用以上例子,如果请求body包含如下:
{
"firstName" : "John",
"lastName" : "",
"age" : -1
}
然后,响应报文将包含:
Last Name, age