Spray.io验证json指令

时间:2014-05-21 18:21:30

标签: json scala validation spray spray-json

使用Spray.IO,我正在构建一个接收JSON输入的服务。 我想通过检查一些字段来验证JSON有效负载。

我对验证JSON模式或解析错误不感兴趣,而是检查字段值,而不是像字段的实际类型(即:Integer vs Float)

我对使用Scala require 不感兴趣,因为这会引发异常,并且无法通知单个请求中发现的客户端所有验证错误。

是否有针对此的内置指令/拒绝?

我在Play(http://www.playframework.com/documentation/2.2.1/ScalaJsonRequests)中看到过类似内容,如果没有内置内容,我将如何自己构建一些内容?

2 个答案:

答案 0 :(得分:0)

你可以在json编组的case类上使用Scala的require。例如:

case class AccountSearchQuery (lookupType:Int, lookupValue:String) {
  require(lookupType != 6 || (lookupType == 6 && lookupValue.toLong > 99999), "lookupValue must be a greater than 99999 for lookupType 6 (account number)") 
  require(!lookupValue.isEmpty(), "lookupValue cannot be empty")
}

当您尝试创建类并且其中一个要求失败时,您将获得异常。如果这是Spray路线的一部分,则响应将为400,并且正文为requirement Failed: [failure message from the require statement that failed]

答案 1 :(得分:0)

为了回答更新的问题以检查所有断言,您可以使用您的require语句获得创意:

case class User(name: String) {
  require(testAll, allTestMessages)
  def test1 = name.length > 5
  def test1M = if(test1) "too short."  else ""

  def test2 = name.length > 10
  def test2M = if(test2) "also too short." else ""

  def testAll = test1 && test2
  def allTestMessages = test1M + test2M 
}