处理播放应用程序中第三方服务的JSON解析错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理播放应用程序中第三方服务的JSON解析错误相关的知识,希望对你有一定的参考价值。

我想知道考虑到反序列化错误,从第三方服务解析JSON的可接受方法是什么。

例如,这种服务方法:

  def signInWithEmailAndPassword(email: String, password: String): Future[ApiResponse[SignInResponse]] =
    request("/signin").post(Json.obj("email" -> email, "password" -> password))
      .map(_.json.as[ApiResponse[SignInResponse]])

如果json.as失败将抛出一个服务器异常,哪个play将在默认错误处理程序中捕获。

这是客户端的正常结构吗?看起来像JSON解析错误无论如何都不是真的可以恢复,所以使用通用错误处理程序是否合适?

答案

假设ApiResponse将保留任何客户端错误(错误的密码等)并且Future将保留服务器错误(无法建立连接,500来自远程服务等),那么是的,它适用于Future中的异常冒泡到错误处理程序并将500返回给调用者(也假设在返回之前没有需要清理的资源)。

另一答案

以下是一些帮助您入门的示例。这是您通常在Play框架控制器中编写的方法。

def dispatchPowerPlant(id: Int) = Action.async(parse.tolerantJson) { request =>
    request.body.validate[DispatchCommand].fold(
      errors => {
        Future.successful{
          BadRequest(
            Json.obj("status" -> "error", "message" -> JsError.toJson(errors))
          )
        }
      },
      dispatchCommand => {
        actorFor(id) flatMap {
          case None =>
            Future.successful {
              NotFound(s"HTTP 404 :: PowerPlant with ID $id not found")
            }
          case Some(actorRef) =>
            sendCommand(actorRef, id, dispatchCommand)
        }
      }
    )
  }

那么它的作用是检查JSON有效负载的有效性并相应地发送响应!希望这可以帮助!

您可能有类似的设置来验证JSON并相应地返回响应。

以上是关于处理播放应用程序中第三方服务的JSON解析错误的主要内容,如果未能解决你的问题,请参考以下文章

json解析失败怎么解决?

如何处理 Spring Rest Web 服务中的 JSON 解析错误

Spotify API 创建播放列表返回 错误: 状态:400,消息:'解析 JSON 时出错。'

json 解析错误的问题

JQuery解析JSON的错误处理

通过 Spotify API 从播放列表中获取 ID