我已经做了一个泛型方法,它可以将json解析为case类,并且它也可以正常工作。但是如果尝试解析具有一个或两个强制字段的大json,那么我无法找出缺少哪个特定的强制字段。我只能使用IllegalArgumentException处理它。有没有一种方法可以在使用json 4s解析Json时知道缺少哪个字段?
下面是我的代码-〉
object JsonHelper {
implicit val formats: DefaultFormats = DefaultFormats
def write[T <: AnyRef](value: T): String = jWrite(value)
def parse(value: String): JValue = jParser(value)
}
这就是我用来解析Json和处理失败案例的方法-〉
def parseJson[M](json: String)(implicit m: Manifest[M]): Either[ErrorResponse, M] = {
try
Right(JsonHelper.parse(json).extract[M])
catch {
case NonFatal(th) =>
th.getCause.getCause match {
case e: java.lang.IllegalArgumentException =>
error(s"Invalid JSON - $json", e)
Left(handle(exception = EmptyFieldException(e.getMessage.split(":").last)))
case _ =>
error(s"Invalid JSON - $json", th)
Left(handle(exception = new IllegalArgumentException("Invalid Json", th)))
}
}
}
就像一个Json -〉
{
"name": "Json"
}
和病例分类-〉
case class(name: String, profession: String)
如果我尝试将上述json解析为case类,当前我得到的是Invalid JSON - IllegalArgumentException
。但是否有一种方法可以让异常告诉哪个字段丢失,如上面的示例"profession"
丢失。
1条答案
按热度按时间txu3uszq1#
在使用json4s解析Json时,是否有一种方法可以知道缺少哪个字段?
也许你有更复杂的设置,但例如
它产生了
具有缺失字段的名称,并且如果类只是
case class MyClass(name: String)
,则这产生MyClass(Json)
。如果类是
case class MyClass(name: String, profession: Option[String])
,则生成MyClass(Json,None)
。