通知客户有关异常的信息

时间:2011-12-28 19:09:02

标签: java json spring-mvc client-server

我有一个基于Spring MVC的应用服务器,它通过JSON与客户端通信。 客户端可以执行的其中一个查询是“我有待处理的消息吗?” 为此,客户端创建一个身份验证对象并将其发布到服务器。作为回报,服务器发回一个待处理消息列表for ex. List<PendingMessage>

现在,如果不是未决消息,我将返回null。但问题是,如何通知客户端如果我有错误,例如,数据库连接丢失,身份验证错误,或者我愿意与客户共享的任何其他异常?

4 个答案:

答案 0 :(得分:0)

您可以捕获代码可以抛出的不同类型的异常。在此基础上,您可以定义自己的自定义消息&amp;把它扔给客户。在客户端,您必须在Exception上执行getMessage()。这应该可以解决问题。

答案 1 :(得分:0)

你可以纯粹通过抛出异常来做到这一点。 SpringMVC将异常映射到标准http状态代码(200s,400s,500s等)。就像您使用Java编写代码一样,您可以创建自定义异常以满足您的特定需求。

答案 2 :(得分:0)

如果您正在设计客户端和服务器,那么您可能想要定义某种协议,这很有趣。您可以将Web服务器视为rpc服务器,它以给定请求的已定义格式返回数据。

例如,使用HTTP状态代码,成功的响应可能会返回以下数据:

{
    status: 200,
    message: "OK",
    data: {
        name: John Doe,
        age: 31
    },
    error: null
}

导致错误的请求:

{
    status: 400,
    message: "Bad Request",
    data: null,
    error: "Database request timed out"
}

你几乎有一个try catch块捕获任何预期的异常,然后可以转换为适当的JSON响应,概述可以由客户端处理的问题。

如果请求在到达servlet之前只是有错误,那么用于发出请求的API可能会暴露某种类型的onError回调,然后可以用它来通知客户端错误。

答案 3 :(得分:0)

从HTTP响应状态代码开始。例如,如果您遇到数据库连接问题,则返回500内部服务器错误。

此方法可能无法为您的客户提供所需的所有信息。因此,您还可以在响应正文中提供JSON详细信息。根据需要构建此JSON。如果您希望客户端应用在收到回复后转到特定网址,请考虑在回复中提供该网址。

最后一点:将200 OK与响应正文中的错误结合起来将是一种糟糕的形式。我以前见过这件事,这很烦人。