2014-01-22 27 views
3

我是新來的JAX-RS和仍然在學習,所以我的問題可能會有點幼稚,請包涵吧:)返回自定義錯誤代碼到客戶端的JAX-RS的響應

我有一直在通過各種SO問題「http響應的錯誤代碼」。我發現只要不想迂腐,他可以在回覆中返回4xx狀態碼。

我也通過這個環節RFS 2616了也W3

我想知道是否有任何一般的做法返回比標準的HTTP響應狀態碼等自定義錯誤代碼。

例如,如果在發佈請求獲取用戶信息的用戶名和返回錯誤,如果用戶ID無效/不存在。在這種情況下,HTTP狀態422聽起來很空閒。但是,如果需要詳細的錯誤描述可以自定義錯誤,如40xx,其中xx是http錯誤以外的值將返回給客戶端。

同樣可以定義40xx並響應客戶端返回? (其在請求正確的語法)

4001 - 用戶ID無效

4002 - 帖子ID無效

等。

或者我應該返回4xx狀態代碼和響應主體通過添加自己的代碼更多的錯誤細節?

+4

我會和你的最後一句話一起去。 –

+0

面臨同樣的問題,這裏想要添加自定義錯誤代碼,但不知道這是否是一般做法 – nishi

回答

11

如果您正在開發不會公開的內部系統,那麼您可以使用自定義代碼。另一方面,如果您想公開某些API,最好堅持使用標準代碼,並在狀態原因詞組或實體主體中提供更多信息。

在JAX-RS,你可以創建自己的狀態(或標準狀態的改寫原因短語),如:

public static class CustomBadRequestType implements Response.StatusType { 

    @Override 
    public int getStatusCode() { 
     return 400; 
    } 

    @Override 
    public String getReasonPhrase() { 
     return "My Reason"; 
    } 

    @Override 
    public Response.Status.Family getFamily() { 
     return Response.Status.Family.CLIENT_ERROR; 
    } 
} 

,然後設置狀態到Response.ResponseBuilder

Response.status(new CustomBadRequestType()).build(); 
1

一個CAN使用更多的自定義代碼(並保留現有的代碼)擴展現有接口,如下所示:

public enum CustomResponseStatus implements Response.StatusType { 
    OK(Response.Status.OK.getStatusCode(), "OK"), 
    CREATED(Response.Status.CREATED.getStatusCode(), "Created"), 
    INVALID_INPUTS(419, "Invalid inputs"); 
} 

可以設置CustomResponseStatus碼作爲響應對象的一部分,如下面

ResponseBuilder.status(CustomResponseStatus.INVALID_INPUTS).build(); 
1

如果自定義狀態是整數102和599(含)之間,還設置與int值的狀態的選項:

ResponseBuilder.status(451).build(); 

實際上,即使使用自定義狀態代碼,也強烈建議使用標準分組(1xx,2xx,3xx,4xx,5xx)。 (提供的例子可能應該是4xx客戶端錯誤。)

相關問題