Validation
squbs Validation provides a Spray directive for data validation by using Accord Validation Library. Since Spray directives are currently Scala only, there is no equivalent in Java code until future versions of squbs.
Dependencies
Add the following dependency to your build.sbt or scala build file:
"org.squbs" %% "squbs-pattern" % squbsVersion
Usage
Given that an implicit Person
validator is in the scope, validate
directive can be used as other Spray Directives:
import ValidationDirectives._
validate(person) {
...
}
Example
Here is a sample Person
class and corresponding validator (please see Accord Validation Library for more validator usage examples).
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
}
}
Now you can use the validate
directive as follows:
scala
def route =
path("person") {
post {
entity(as[Person]) { person =>
import ValidationDirectives._
validate(person) {
respondWithMediaType(`application/json`) {
complete {
person
}
}
}
}
}
}
If a validation rejection happens, a 400 Bad Request
is returned with the response body containing the comma separated list of field(s) causing validation rejection. Using the above example, if the request body contains the following:
{
"firstName" : "John",
"lastName" : "",
"age" : -1
}
then, the response body would contain:
Last Name, age