java - 尝试使用 scala Try 函数获取错误时出错

标签 java scala scala-collections

我试图用 try 捕获一些错误,但我收到了一些错误,我不知道为什么,这是代码:

class Application extends Controller {

  val ds: DataSource = CsvDataSource
  val purchaseDS = PurchaseInfo.fromDataSource(ds)_


  def index = Action { implicit request =>
    Ok(views.html.index())
  }

  def redirectToIndex = Action {
    Redirect(routes.Application.index)
  }

  case class csvUploadData(clientUrl: String)
  val csvUploadForm = Form(
    mapping(
      "clientUrl" -> nonEmptyText)(csvUploadData.apply)(csvUploadData.unapply))

  def uploadCSV = Action.async(parse.multipartFormData) { implicit request =>
    csvUploadForm.bindFromRequest.fold(
      formWithErrors => {
        Future {
          Redirect(routes.Application.index).flashing(
            "error" -> formWithErrors.error("clientUrl").get.message)
        }
      },
      userData => {
        request.body.file("csvFile").fold(Future {
          Redirect(routes.Application.index).flashing(
            "error" -> "Missing CSV file").withSession(request.session)
        }) { formFile =>
          import java.io.File
          val filename = formFile.filename
          Future {
            val file = formFile.ref.file
            val purchaseInfos = purchaseDS(file)

            val t = Try {
              val driver: WebDriver = new FirefoxDriver
              val actions: ActionsHMRC = new ActionsHMRC(driver, userData.clientUrl)

              val results = actions.insertData(purchaseInfos)
              results.filter(_._2.isFailure)
            }
            t match {
              case Success(failures) =>
                val failedMsg = if (failures.nonEmpty) failures.mkString("The following rows failed: [",",","]") else ""
                Redirect(routes.Application.index).flashing(
                "success" -> s"The file '$filename' automation successfuly.\n$failedMsg")
              case Failure(e) =>
                println(e)
                Redirect(routes.Application.index).flashing(
                "error" -> s"The file '$filename' automation failed.")
            }
          }
        }
      })
  }
}

ActionsHMRC 方法:

def insertData(purchaseInfos: Seq[PurchaseInfo]) = {
    login()
    purchaseInfos.map { case purchaseInfo =>
      (purchaseInfo, Try(doActions(purchaseInfo)))
    }
    println("done insertData function")
  }

这些线是红色的(所以它们有问题),我不明白为什么......

过滤器(_._2

非空

mk字符串

如果你知道发生了什么,它会帮助分配,谢谢

最佳答案

insertData,按书面形式返回单位。单位没有过滤方法。

我建议向方法(以及任何公共(public)方法)添加返回类型,这将有助于编译器为您提供更接近错误实际位置的错误消息。

关于java - 尝试使用 scala Try 函数获取错误时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30922549/

相关文章:

java - 使用 TLSv1.1 支持扩展 Java 6

java - 循环两次但在 JAVA 中花费相同的时间

java - 在树的图形表示中画线

Scalaz optionT 转换器似乎因类型别名而失败

generics - Scala 的 (2.8) list 如何工作?

scala - 是否有 Scala 版本的 NavigableMap?

scala - 如何将 List(String,String) 转换为 List Map[String,String]?

java - Python 和 Java 中的位操作

scala - 如何在 sbt 测试中仅显示失败的测试?

java - scala 2.8 隐式 java 集合转换