2016-07-28 75 views
3

我定義了我的REST方法來返回一個字符串數據類型作爲對http請求的響應。這是它:爲什麼有必要將Response對象而不是String對象返回給java中的http請求?

@Path("https://stackoverflow.com/users/{name}/") 
    @GET 
    @Produces("application/json") 
    public String getAllUserMemberships(@PathParam("name") String name) throws Exception{ 

     String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}"; 

     return doc; 
    } 

它工作正常,但是我被別人告知,而返回javax.ws.rs.core.Response對象,如下面的示例代碼。這也可以正常工作,他說這是響應HTTP請求的最佳方式,但他不知道爲什麼。

@Path("https://stackoverflow.com/users/{name}/") 
    @GET 
    @Produces("application/json") 
    public Response getAllUserMemberships(@PathParam("name") String name) throws Exception{ 

     String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}"; 


     return Response.ok(doc, MediaType.APPLICATION_JSON).build(); 
    } 

我的問題是:是否需要一個Response對象返回一個HTTP請求時,你可以返回一個字符串。如果有必要,請告訴我爲什麼,因爲在進行HTTP請求時遇到困難,哪一個是正確的。 我也擔心響應對象可能會給我我可能無法處理的問題。

+1

這是爲了方便。您可能需要設置一堆標題。您可能想要控制狀態碼。 'Response'可以讓你做到這一點。 'String'(本身)不是。 –

回答

7

如果你返回一個簡單的字符串,你不能控制發生錯誤時會發生什麼。 但是,如果你返回Response對象可以返回一個適當的500錯誤與錯誤消息:

try { 
    return Response.ok(successResult).build(); 
} catch(Exception ex) { 
    return Response.serverError().entity(fault).build(); 
    //or 
    return Response.status(500).entity(fault).build(); 
} 

正如其他人所說,它可以讓你喜歡的設置了一些有用的頭一個HTTP響應等方面的控制:

Response response = Response.ok(successResult); 

response.getHeaders().put("Access-Control-Allow-Origin", "*"); 
response.getHeaders().put("Access-Control-Allow-Headers", 
     "origin, content-type, accept, authorization"); 
response.getHeaders().put("Access-Control-Allow-Credentials", "true"); 
response.getHeaders().put("Access-Control-Allow-Methods", 
     "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 

而且發送帶有該文件要容易得多:

File fileToSend = getFile(); 
return Response.ok(fileToSend, "application/zip").build(); 

所以有很多原因,如果不想做任何特殊後來乾脆如果你想修改HTTP響應屬性,返回對象就足夠了,那麼你必須使用Response。

1

Response對象允許您返回http數據以及方法的響應。例如,Response對象可以包含標題,響應代碼和String無法自行返回的其他相關信息。有了這個說法,不,這是沒有必要的。您的程序應該使用String正確運行。但是,使用Response對象可能是有益和方便的。

0

當您返回字符串時,您的Web應用程序仍然會爲任何請求提供HTTP響應。指定Response對象將會給你更直接的控制。你的標籤應該足以爲你的目的配置Response,所以我認爲對於這樣直截了當的事情來說,創建你自己的Response對象並不是「更好」。

3

這是沒有必要的。

但很多人喜歡總是返回一個Response對象,因爲你經常需要控制響應頭(不僅僅侷限於那些在註釋中設置)和響應的其他方面,如狀態代碼。所以如果你有時候返回一個字符串,有時會返回一個響應,它看起來很不一致。不斷創建一個清晰易用的模式。

如果你的應用程序真的很平凡,那麼它並不重要;否則,你在考慮這個事實表明風格很重要。

相關問題