2016-07-27 145 views
0

正在使用REST API。這裏的示例工作正常,但是我對這裏的某些東西感到困惑。我的方法getAll返回一個字符串,但該方法已被註釋爲生成JSON的MIME MediaType。我的問題是,是最終返回的響應(文檔)JSONObject或只是一個JSON字符串(因此JSON格式的字符串)。這樣我才能知道如何處理響應。javax.ws.rs:方法實際返回的內容

@Path("/membership/{pageNumber}") 
    @GET 
    @Produces("application/json") 
    public String getAll(@PathParam("pageNumber") String pageNumber){ 

     Map<String , String > params = new HashMap<>(); 
     String doc = HTTPClient.sendGet("localhost:9500/users/list/membership/field/" 
         +pageNumber, params, 60); 

     return doc; 
    } 

這對我的文檔也有幫助。 所有的努力表示讚賞,謝謝。

回答

2

我的問題是,是最後返回的響應(DOC)一個JSONObject或 只是一個JSON字符串(因此,在JSON格式的字符串)

是的,它會返回JSON字符串,如果您想一起發送JSON和HTTP狀態,則可以使用Response作爲返回類型。

例子:

@GET 
@Path("/testGet") 
@Produces("application/json") 
public Response testGet() { 
    String json = //Create JSON String 
    return Response.ok(json, MediaType.APPLICATION_JSON).build(); 
} 
+0

會嘗試Response.ok(..... –

+0

請響應,不是屬於哪個庫,因爲它不是爲工作這些庫正在導入 –

+0

它是[Jax-Rs](https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api/2.0) –

1

什麼實際是由法

返回正是你回來。這是Java。這就是Java的工作原理。沒有魔法巫術。


也許你想知道別的。

所有響應都寫入響應輸出流。返回類型是什麼並不重要。重要的是有一個MessageBodyWriter知道如何根據@Produces內容類型將該類型寫入輸出流。如果返回類型是字符串,那麼需要有一位知道如何處理String-application/json組合的作者。如果返回類型是JSONObject,那麼需要有一個能夠處理的作者

另請參見:JAX-RS Entity Providers

客戶需要什麼都不知道任何Java類型(即斯汀,JSONObect等)。它獲取數據的字節流並使用它使用的任何轉換方法轉換數據。

+0

感謝您的信息 –

1

您終於生成一個JSON字符串。

,而不是僅僅返回字符串的建議使用實體

return Response.ok().entity(doc).build(); 
+0

您指定的返回的語句也返回一個JSON字符串? –

+0

非常感謝,非常感謝 –