簡體   English   中英

REST 資源方法的默認 MIME 類型

[英]Default MIME types for REST resource methods

我正在嘗試了解 RESTful 服務中的 MIME 類型。如果有如下資源方法(sayHello)

@Path("/customers")
public class CustomerResource {
    @GET
    public String sayHello(){
        return "Hello World";
    }
}

我沒有在上面的方法上添加任何@Produces@Consumes注釋。 我有以下問題。

  1. 上面的方法是否有任何默認的 MIME 類型用於發送響應?
  2. 或者它是否根據傳入請求的“接受類型”產生響應內容類型?
  3. 請求沒有指定它接受什么內容類型會發生嗎? 如果是這樣的話,上面的資源方法會產生什么響應內容類型?

提前致謝。

通常它會默認為application/octet-stream除非客戶端設置Accept標頭,在這種情況下,這就是將使用的類型。

您需要注意的一件事是沒有MessageBodyWriter來處理application/octet-stream和大多數類型。 例如說你有

@GET
public SomeModel get() {}

如果客戶端未設置Accept: application/json標頭,則運行時將查找MessageBodyWriter以將SomeModel序列SomeModel application/octet-stream ,並且它將失敗並且您將收到類似“No為媒體類型應用程序/八位字節流和類型 SomeModel 找到 MessageBodyWriter”。

所以放置@Produces總是一個好主意。 另一個好處是可以確定端點可以生成什么類型​​。 例如,如果您有@Produces("application/json") ,並且客戶端設置了Accept: application/xml標頭,那么他們將收到 406 Not Acceptable 錯誤代碼,這就是應該發生的情況。

注意第一段,我用了“經常”這個詞。 情況並非總是如此。 對於某些情況,運行時會根據返回類型做出假設。 例如,如果您返回一個String ,則運行時很可能會選擇text/plain

但就像我說的,擁有@Produces@Consumes注釋總是更好。 這些提示不僅適用於開發人員,也適用於運行時做出決策。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM