假設我們有這個服務發佈一些基於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 */
}
也許我沒有感覺到差異,因爲我只是我的API的一個消費者......但'公共'消費者必須知道從服務器返回的JSON的結構,所以使用此API的任何人都必須知道/期望一個JSON。真的嗎?此Content-Type僅用於服務器的附加驗證,例如會改變API中的某些內容並使用一些不同的數據格式? – flyer
@flyer是Content-Type允許Web服務的使用者決定如何使用它。由於Web服務可以生成不同的內容,例如json或xml。現在消費者將如何決定,他應該使用哪個解析器來解析響應。因此,消費者會查看內容類型頭,然後相應地獲取解析器來消費響應。 –