1

ブラウザへの応答がどのように機能するかを理解したい。例として、jersey は、アノテーション @Produces によって定義された最も受け入れ可能なメディア タイプでリクエストに応答すると述べています。

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

上記の場合、最も受け入れられるタイプは「application/xml」です。ええと...このメディアタイプの場合、サーブレットで行います:

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

ポイントは、上記の最後の行で行ったように、メディアの種類に応じて応答をフォーマットする必要があるということです。

ブラウザが「application/xml」をサポートしていないと仮定して、2番目に許容されるタイプであるHttpServletResponseを使用してフォーマットする方法を知りたいです。この状況では、「application/json」を選択する必要があります。

4

1 に答える 1

2

指示がない限り、クライアントがサポートするメディアの種類を知ることはできません。これは通常、Acceptヘッダーで行われます。

Accept 要求ヘッダー フィールドを使用して、応答に受け入れられる特定のメディア タイプを指定できます。

したがって、クライアントが送信する場合

Accept: application/xml

application/xmlフォーマットされた応答を生成するようにしてください。

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

このような応答を生成できない場合は406 Not Acceptable、適切な本文を含むステータス コードで応答する必要があります。

于 2013-10-09T13:46:55.687 に答える