向 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,或者可以为客户端提供一些上下文的任何东西。

如果您担心使用异常,那也没关系。当然,您可以准备一个带有手动设置状态代码的响应,但这不会改变任何东西,它只是更多的代码。在这种情况下使用异常时也不太可能产生错误。