我有一个基于Spring MVC的应用服务器,它通过JSON与客户端通信。
客户端可以执行的其中一个查询是“我有待处理的消息吗?”
为此,客户端创建一个身份验证对象并将其发布到服务器。作为回报,服务器发回一个待处理消息列表for ex. List<PendingMessage>
现在,如果不是未决消息,我将返回null。但问题是,如何通知客户端如果我有错误,例如,数据库连接丢失,身份验证错误,或者我愿意与客户共享的任何其他异常?
答案 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与响应正文中的错误结合起来将是一种糟糕的形式。我以前见过这件事,这很烦人。