【问题标题】:scala json validation not workingscala json验证不起作用
【发布时间】: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


【解决方案1】:
(JsPath \ "artWorkid").read(minLength[String](1))

对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2016-01-30
    • 2015-09-02
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多