繁体   English   中英

Scala FOLD执行无效和有效的代码块

[英]Scala FOLD executing both invalid and valid blocks of code

我有以下代码,通过控制器验证JSON输入。 我正在使用JSON模式验证,并根据您在代码中看到的有效还是无效来提供响应。 发送无效的JSON时出现以下怪异行为。

[error] - superman - Event=Bad Request Received, Reason=Invalid Json, Response={"GUID":"\"e28fa115-67f4-4265-b7d0-61e6af1237c2\"","status":"error","description":"Invalid Request Received","violations":"List(\"Property action missing\")"}
invalid
successfully inserted document with result = DefaultWriteResult(true,1,List(),None,None,None)

为什么它运行的代码有效区块行mongo.writeDocument(reqJson)而JSON是无效的,它实际上打印invalid从无效块。 但是,要注意的另一件事是,即使它在mongo.writeDocument(reqJson)旁边,也不会打印valid字符串。

def validateJson = Action(parse.json) {

    request => {
      val logger = LoggerFactory.getLogger("superman")
      val jsonSchema = Source.fromFile(play.api.Play.getFile("conf/schema.json")).getLines.mkString
      val reqJson: JsValue = request.body
      val GUID = (reqJson \ "guid").get
      val result: VA[JsValue] = SchemaValidator.validate(Json.fromJson[SchemaType](
        Json.parse(jsonSchema.stripMargin)).get, reqJson)

      result.fold(
        invalid = { errors =>

          var violatesList = List[String]()
          var invalidError = Map("GUID" -> GUID.toString(), "status" -> "error", "description" -> "Invalid Request Received")
          for (msg <- (errors.toJson \\ "msgs"))
            violatesList = (msg(0).get).toString() :: violatesList
          invalidError += ("violations" -> (violatesList.toString()))
          val errorResponse = Json.toJson(invalidError)
          logger.error("Event=Bad Request Received, Reason=Invalid Json, Response=" + errorResponse)
          println("invalid")
          BadRequest(errorResponse)

        },

        valid = {
          println("valid")
          mongo.writeDocument(reqJson)
          val successResponse = Json.obj("GUID" -> GUID.toString, "status" -> "OK", "message" -> ("Valid Request Received"))
          logger.info("Event=Valid Request Received, Response=" + successResponse)
          post => Ok(successResponse)
        }
      )
    }
  }

在检查了更多文档之后,我发现post =>应该在valid = {函数旁边,就像这样:

valid = {
          post =>
          println("valid")
          mongo.writeDocument(reqJson)
          val successResponse = Json.obj("GUID" -> GUID.toString, "status" -> "OK", "message" -> ("Valid Request Received"))
          logger.info("Event=Valid Request Received, Response=" + successResponse)
          Ok(successResponse)
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM