2016-02-18 27 views
0

在我的GAE端點中,在我的用戶註冊API方法中,我檢查用戶是否已經存在給定的用戶名。如果用戶已經存在,我需要向端點客戶端發送錯誤。向appengine端點客戶端發送錯誤

目前我從端點拋出如下所示的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 ee.getContent()包含一個JSON字符串包括從端點發送的錯誤消息字符串。我需要解析json以獲取從服務器發送的實際錯誤消息。

即使這樣做,我覺得應該有一個更好的方法來從端點向客戶端發送錯誤消息。那麼,有沒有人知道一個更好的(或推薦)這樣做?

+0

對我來說看起來不錯。你的'HttpResponseException'不僅包含一個內容部分。它應該包含一個statusCode,它比代碼中的內容更容易處理,因爲if(statusCode == 400){Whoopsie ...}比解析響應更容易。 – konqi

回答

2

我認爲你做的一切都是正確的。

HTTP旨在向用戶發送帶有4xx代碼和有意義內容的響應。它可以是瀏覽器的HTML,api客戶端的JSON或任何可以爲客戶端提供一些上下文的東西。

如果你擔心使用異常,那也沒關係。當然,您可以使用手動設置的狀態碼準備響應,但這不會改變任何內容,它只是更多的代碼。在這種情況下使用異常的情況下,您也不太可能創建錯誤。

+0

@konqi謝謝!! –

相關問題