Java 向appengine端点客户端发送错误

Java 向appengine端点客户端发送错误,java,google-app-engine,google-cloud-endpoints,Java,Google App Engine,Google Cloud Endpoints,在我的GAE端点中,在我的用户注册API方法中,我检查是否已经存在具有给定用户名的用户。如果用户已经存在,我需要向端点客户端发送一个错误 目前,我从端点抛出一个类似于下面的命令 User user = ofy().load().key(Key.create(User.class, username)).now(); if (user != null) { throw new BadRequestException("Username already exists"); } 然后在end

在我的GAE端点中,在我的用户注册API方法中,我检查是否已经存在具有给定用户名的用户。如果用户已经存在,我需要向端点客户端发送一个错误

目前,我从端点抛出一个类似于下面的命令

User user = ofy().load().key(Key.create(User.class, username)).now();
if (user != null) {
    throw new BadRequestException("Username already exists");
}
然后在endpoint client中,我捕获如下异常

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


如果您担心使用异常,那也没关系。当然,您可以使用手动设置的状态代码来准备响应,但这不会改变任何事情,它只是更多的代码。在这种情况下,当您使用异常时,创建错误的可能性也较小。

我认为您所做的一切都是正确的

HTTP旨在向用户发送带有4xx代码和有意义内容的响应。它可以是浏览器的HTML,api客户端的JSON,或者任何可以为客户端提供上下文的东西


如果您担心使用异常,那也没关系。当然,您可以使用手动设置的状态代码来准备响应,但这不会改变任何事情,它只是更多的代码。在这种情况下,当您使用异常时,创建错误的可能性也较小。

在我看来没问题。您的
HttpResponseException
不仅包含一个内容部分。它应该包含一个statusCode,它应该在代码中比在内容中更容易处理,因为
if(statusCode==400){Whoopsie…}
比解析响应和处理它更容易。在我看来没问题。您的
HttpResponseException
不仅包含一个内容部分。它应该包含一个statusCode,它应该比内容更容易在代码中处理,因为
if(statusCode==400){Whoopsie…}
比解析响应和处理响应更容易。