【发布时间】:2015-07-06 00:38:26
【问题描述】:
我正在关注 **Play For Scala ** 来验证和解析 Json
像这样将其转换为 JsValue 后,我在控制器中收到了一个请求
val jsonRequest = request.body.asJson.get
我正在尝试像这样验证它
jsonRequest.validate[ReadArtWorkCaseClass].fold(
valid = {
readArtWorkCaseClass =>
log.info("valid block")
Ok("validation successful" )
},
invalid = {
log.info("invalid block")
errors => {
log.info("error block")
BadRequest(JsError.toFlatJson(errors))
}
}
)
我已经为此实现了 Read
case class ReadArtWorkCaseClass(artworkid :String,
artistid :String,
institutionid :String ,
status :String,
groupactivityid:String,
details:String,
pricehistoryid :String,
sku :String,
dimensions :String,
artworkname :String,
artworkseries :String ,
workclassifier :String ,
genreid :String,
artworktype :String,
createddate:String)
object ReadArtWorkCaseClass {
implicit val artworkReads: Reads[ReadArtWorkCaseClass] = (
(JsPath \ "artWorkid").read[String] and
(JsPath \ "artistid").read[String] and
(JsPath \ "institutionid").read[String] and
(JsPath \ "activationStatus").read[String] and
(JsPath \ "groupactivityid").read[String] and
(JsPath \ "details").read[String] and
(JsPath \ "pricehistoryid").read[String] and
(JsPath \ "sku").read[String] and
(JsPath \ "dimensions").read[String] and
(JsPath \ "artworkname").read[String] and
(JsPath \ "artworkseries").read[String] and
(JsPath \ "workclassifier").read[String] and
(JsPath \ "genreid").read[String] and
(JsPath \ "artworktype").read[String] and
(JsPath \ "createddate").read[String]
)(ReadArtWorkCaseClass.apply _)
}
当我尝试通过输入空字段来验证 jsonrequest 时,它不会进入无效块,而是运行有效块
请指导我的错误是什么
【问题讨论】:
-
“空字段”是什么意思?如果您将空字符串作为值,则它是正确的。空字符串仍然是字符串。您应该粘贴测试数据的样本。
-
我正在提交带有空文件的表单,我认为您是对的,但是当我尝试指定这样的特定字符串的长度时 (JsPath \ "artWorkid").read[String](minLength[String ](10)) 它给了我以下错误方法 minLength: (length: Int)play.api.data.validation.Constraint[String] 不采用类型参数。
-
根据错误消息我会尝试
minLength(10)。貌似type参数已经设置为String,调用函数时不需要指定。 -
我试过这样 (JsPath \ "artWorkid").read[String](minLength(10)) 但它在这部分给出错误 "(JsPath \ "artWorkid").read[ String]”并且错误是“使用替代方法读取的重载方法值:(t: String)play.api.libs.json.Reads[String]
(implicit r: play.api.libs.json.Reads[String) ])play.api.libs.json.Reads[String] 不能应用于 (play.api.data.validation.Constraint[String])" ,是否有一些我缺少的导入或其他东西?
标签: json scala validation playframework-2.0