squbs-16. 校验

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 

你可能感兴趣的:(squbs-16. 校验)