使用Spray.IO,我正在构建一个接收JSON输入的服务。 我想通过检查一些字段来验证JSON有效负载。
我对验证JSON模式或解析错误不感兴趣,而是检查字段值,而不是像字段的实际类型(即:Integer vs Float)
我对使用Scala require 不感兴趣,因为这会引发异常,并且无法通知单个请求中发现的客户端所有验证错误。
是否有针对此的内置指令/拒绝?
我在Play(http://www.playframework.com/documentation/2.2.1/ScalaJsonRequests)中看到过类似内容,如果没有内置内容,我将如何自己构建一些内容?
答案 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
}