2013-07-23 55 views
0

假設我們有這個服務發佈一些基於REST的資源:@Produces @Consumes意義...... JSON或者它僅僅是一個字符串

@POST 
@Produces("application/json") 
@Consumes("application/json") 
public String doPostJson(String string) { 
    ... 
} 

(我能在我的服務器運行上面的,所以我假設這是一個有效的實現)

現在我在考慮doPostJson()獲取String並返回String。這個字符串可能與JSON有效字符串完全不同。我對嗎?那麼,如果我可以在這裏使用任何字符串,那麼「application/json」是什麼意思?

更多: 另一方面,我可以使用它嗎?

@POST 
@Produces("text/plain") 
@Consumes("text/plain") 
public String doPostJson(String string) { 
    ... /* read passed parameter as JSON valid string and return JSON string */ 
} 

回答

3

ProducesConsumes註釋分別用於與Web服務用戶共享Content-TypeAccept頭信息。內容類型標題將幫助您的服務的接收者/消費者,根據該標題中的信息來處理響應。如果將content-type頭的值標記爲application/json,則接收者可以相應地使用json解析器。同樣,使用Consumes,您可以確保Accept頭是application/json,因此您可以相應地執行json解析/解組。

+1

也許我沒有感覺到差異,因爲我只是我的API的一個消費者......但'公共'消費者必須知道從服務器返回的JSON的結構,所以使用此API的任何人都必須知道/期望一個JSON。真的嗎?此Content-Type僅用於服務器的附加驗證,例如會改變API中的某些內容並使用一些不同的數據格式? – flyer

+1

@flyer是Content-Type允許Web服務的使用者決定如何使用它。由於Web服務可以生成不同的內容,例如json或xml。現在消費者將如何決定,他應該使用哪個解析器來解析響應。因此,消費者會查看內容類型頭,然後相應地獲取解析器來消費響應。 –

1

「application/json」是您正在使用的MIME類型,請參閱此相關問題了解更多詳情link。它有助於應用程序與應用程序通信。他們可能會完全拒絕迴應它應該是錯誤的MIME類型,例如圖像/ JPEG,而不是應用程序/ JSON

+0

感謝您的參考。它看起來像我曾經見過的最有爭議的討論。我的問題更像是「這個設置如何幫助我的應用程序」? – flyer

+0

更新我的答案有點 – Zavior

相關問題