squbs-16. 校验

作者: 吕亦行 | 来源:发表于2017-01-31 15:08 被阅读8次

    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. 校验

        本文链接:https://www.haomeiwen.com/subject/ixhkittx.html