2013-10-09 15 views
1

我想了解對瀏覽器的響應如何工作。作爲一個例子,表示球衣它響應與由註釋@Produces定義最可接受的媒體類型的請求:上述如何格式化servlet響應以產生HTML中的「接受」參數可接受的媒體類型?

@GET 
@Produces({"application/xml", "application/json"}) 
public String doGetAsXmlOrJson() { 
    ... 
} 

在這種情況下,最上可接受的類型是「application/xml進行」。嗯......對於這種媒體類型,我會做的Servlet中:

response.setContentType("application/xml"); 
PrintWriter out = response.getWriter(); 
out.println("<root><x>1</x></root>"); 

的一點是:我需要根據媒體類型格式化迴應,正如我在最後一行上面完成。

我想知道如何使用HttpServletResponse格式化第二種可接受的類型,假設瀏覽器不支持「application/xml」。在這種情況下,應該選擇「application/json」。

回答

2

除非它告訴你,否則無法知道客戶端支持哪種媒體類型。這通常通過Accept header完成。

Accept request-header字段可用於指定響應可接受的某些媒體 類型。

因此,如果客戶端發送

Accept: application/xml 

你應該嘗試產生application/xml格式的響應。

String mediaType = request.getHeader("Accept"); // can return null 

如果不能產生這樣的反應,你應該用適當的身體406 Not Acceptable狀態碼。

+2

@LucasBatistussi剛剛編輯。 'HttpServletRequest'有一個'getHeader()'方法,如果它不存在,它將返回標頭值或'null'。 –

相關問題