2012-11-21 27 views
0

我有以下代碼:JAX-RS如何寫響應

@POST 
@Path("query") 
@Produces(MediaType.APPLICATION_JSON) 
public MyObject myMethod(@FormParam("id") String id) 
{ 
    //if some condition is met 
    if(...) 
     throw new WebApplicationException(Response.Status.SERVICE_UNAVAILABLE); 
    else 
     //proceed to my logic and return myObject 
} 

所以基本上,如果我的Web客戶端,使用AJAX,收到Response.Status.SERVICE_UNAVAILABLE,它會顯示一個定製的網頁。如果通話成功,它將顯示不同的網頁。

我的問題是:有沒有反正,在myMethod,我可以返回Response.Status.SERVICE_UNAVAILABLE沒有拋出異常。例如:

if(...) 
    return Response.Status.SERVICE_UNAVAILABLE) 
else 
    //proceed my logic and return myObject 

我基本上希望客戶端知道它的請求目前無法實現並顯示自定義的網頁。

回答

2

你的方法應該返回一個Response,而不是MyObject

@POST 
@Path("query") 
@Produces(MediaType.APPLICATION_JSON) 
public Response myMethod(@FormParam("id") String id) { 
    if (/* error */) { 
    return Response.status(Response.Status.SERVICE_UNAVAILABLE).build(); 
    } 
    return Response.ok().entity(new MyObject(/* ... */)).build(); 
} 

不過,我會強烈建議使用WebApplicationException針對這種情況,多爲定期和特殊情況下的邏輯分離的緣故。此SERVICE_UNAVAILABLE響應狀態(HTTP代碼503)是錯誤的明確標誌,不是正常的執行流程。

+0

謝謝yegor256。你能告訴我爲什麼建議使用WebapplicationException嗎? – neo

+0

我更新了我的答案 – yegor256