1

我想了解对浏览器的响应是如何工作的。例如,jersey 表示它使用注释 @Produces 定义的最可接受的媒体类型响应请求:

 @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”。

4

1 回答 1

2

除非它告诉您,否则您无法知道客户端支持什么媒体类型。这通常通过Acceptheader完成。

Accept request-header 字段可用于指定响应可接受的某些媒体类型。

所以如果客户端发送

Accept: application/xml

您应该尝试生成application/xml格式化的响应。

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

如果您无法产生这样的响应,则应使用406 Not Acceptable带有适当正文的状态代码进行响应。

于 2013-10-09T13:46:55.687 回答