在我的GAE端点中,在我的用户注册API方法中,我检查用户是否已存在具有给定用户名的用户。如果用户已存在,我需要向端点客户端发送错误。
目前我从端点抛出如下所示的exception。
$first
然后在端点客户端中,我捕获如下的异常。
User user = ofy().load().key(Key.create(User.class, username)).now();
if (user != null) {
throw new BadRequestException("Username already exists");
}
当端点抛出BadRequestException时,客户端获取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.";
}
并且HttpResponseException e
包含一个json字符串,包括从端点发送的错误消息字符串。我需要解析json以获取从服务器发送的实际错误消息。
尽管这有效,但我觉得应该有更好的方法从端点向客户端发送错误消息。那么,有没有人知道更好(或推荐)的方式呢?
答案 0 :(得分:2)
我认为你做的一切都是正确的。
HTTP旨在向用户发送包含4xx代码和有意义内容的响应。它可以是浏览器的HTML,api客户端的JSON或者可以为客户端提供某些上下文的任何内容。
如果您担心使用例外,那也很好。当然,您可以使用手动设置的状态代码准备响应,但这不会改变任何内容,只需要更多代码。当您在这种情况下使用例外时,您也不太可能创建错误。