簡體   English   中英

如何在Throwable Scala對象中獲取數據?

[英]How to get data inside a Throwable Scala object?

如何在Throwable Scala對象中獲取信息?

該代碼是有關throwable.getMessage的示例。

JsResultException(errors:List((,List(JsonValidationError(List('eoh' is undefined on object: {"store":"8767565","sku":"1983278364782364782"}),WrappedArray())))))

我需要將JsResultExceptionJsonValidationError提取為字符串, 'eoh' is undefined on object message和JSON object:之前'eoh' is undefined on object消息'eoh' is undefined on object

這是使優美的日志。

考慮將JsResultException.errors轉換為

Seq[(JsPath, Seq[JsonValidationError])]

其中JsonValidationError.errors是另一個序列Seq[String] ,成為一個更簡單的元組

Seq[(JsPath, String)]

像這樣

case JsResultException(errors) =>
  errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }

這將產生更易於管理的結構,類似於

List((/id,error.path.missing), (/name,error.path.missing))

代替

List((/id,List(JsonValidationError(List(error.path.missing),WrappedArray()))), (/name,List(JsonValidationError(List(error.path.missing),WrappedArray())))))]

這是一個有效的例子

case class User(name: String, id: Int)
object User {
  implicit val formats = Json.format[User]
}

val raw = """{ "nam": "mario", "i": 5 }"""

try {
  Json.parse(raw).as[User]
} catch {
  case JsResultException(errors) =>
    errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }
}

還可以考慮使用驗證來避免像這樣拋出異常

Json.parse(raw).validate[User] match {
  case s: JsSuccess[User] => s
  case JsError(errors) => 
    errors.map { case (path, validationErrors) => path -> validationErrors.map(_.messages.mkString(",")).mkString(",") }
}

您可以始終使用scala.util.Try和pattern匹配Failure。

import scala.util._

def someExceptionThrowingMethod(): T = ???

Try(someExceptionThrowingMethod()) match {
    case Success(t: T) => ???
    case Failure(exception: Throwable) => exception match {
        case JsResultException((_, JsonValidationError(headMessage :: _) :: _, _) :: _) => 
          //here headMessage is the 'eoh' is undefined on object: {"store":"8767565","sku":"1983278364782364782"} message you wrote above
        case otherException: Throwable => ???
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM