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 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,489评论 2 45
  • 在Struts2中,可以对Action的所有方法进行校验或者对Action的指定方法进行校验。 对于输入校验Str...
    exmexm阅读 1,400评论 0 1
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,344评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 当工北准备忘记这个女人的时候,交叉在内心的撕裂一遍又一遍的袭击着他。 那天晚上当他们决定彼此再也不联系的时候,缠绕...
    X先生阅读 199评论 0 0