向 appengine 端点客户端发送错误
Send an error to appengine endpoint client
在我的 GAE 端点中,在我的用户注册 API 方法中,我检查是否已经存在具有给定用户名的用户。如果用户已经存在,我需要向端点客户端发送错误。
目前我从端点抛出如下所示的 exception。
User user = ofy().load().key(Key.create(User.class, username)).now();
if (user != null) {
throw new BadRequestException("Username already exists");
}
然后在端点客户端中,我捕获了如下所示的异常。
try {
gaeEndpoint.registerUser(mEmail, mPassword).execute();
} catch (HttpResponseException e) {
mErrorMessage = e.getContent();
} catch (IOException e) {
mErrorMessage = "Failed to communicate with server. Please check your internet connection.";
}
当端点抛出 BadRequestException 时,客户端获取 HttpResponseException e
并且 e.getContent()
包含一个 json 字符串,其中包括从端点发送的错误消息字符串。我需要解析 json 以获取从服务器发送的实际错误消息。
尽管这可行,但我觉得应该有更好的方法从端点向客户端发送错误消息。那么,有人知道更好的(或推荐的)方法吗?
我认为你做的一切都是对的。
HTTP 旨在向用户发送带有 4xx 代码和有意义内容的响应。对于浏览器,它可以是 HTML,对于 api 客户端,它可以是 JSON,或者可以为客户端提供一些上下文的任何东西。
如果您担心使用异常,那也没关系。当然,您可以准备一个带有手动设置状态代码的响应,但这不会改变任何东西,它只是更多的代码。在这种情况下使用异常时也不太可能产生错误。
在我的 GAE 端点中,在我的用户注册 API 方法中,我检查是否已经存在具有给定用户名的用户。如果用户已经存在,我需要向端点客户端发送错误。
目前我从端点抛出如下所示的 exception。
User user = ofy().load().key(Key.create(User.class, username)).now();
if (user != null) {
throw new BadRequestException("Username already exists");
}
然后在端点客户端中,我捕获了如下所示的异常。
try {
gaeEndpoint.registerUser(mEmail, mPassword).execute();
} catch (HttpResponseException e) {
mErrorMessage = e.getContent();
} catch (IOException e) {
mErrorMessage = "Failed to communicate with server. Please check your internet connection.";
}
当端点抛出 BadRequestException 时,客户端获取 HttpResponseException e
并且 e.getContent()
包含一个 json 字符串,其中包括从端点发送的错误消息字符串。我需要解析 json 以获取从服务器发送的实际错误消息。
尽管这可行,但我觉得应该有更好的方法从端点向客户端发送错误消息。那么,有人知道更好的(或推荐的)方法吗?
我认为你做的一切都是对的。
HTTP 旨在向用户发送带有 4xx 代码和有意义内容的响应。对于浏览器,它可以是 HTML,对于 api 客户端,它可以是 JSON,或者可以为客户端提供一些上下文的任何东西。
如果您担心使用异常,那也没关系。当然,您可以准备一个带有手动设置状态代码的响应,但这不会改变任何东西,它只是更多的代码。在这种情况下使用异常时也不太可能产生错误。