如何格式化servlet响应以生成HTML中“accept”参数可接受的媒体类型?

时间:2013-10-09 13:25:08

标签: java html servlets types response

我想了解对浏览器的响应是如何工作的。作为一个例子,泽西说,它以一个由注释@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”。

1 个答案:

答案 0 :(得分:2)

除非它告诉您,否则您无法知道客户端支持的媒体类型。这通常使用Accept header

完成
  

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

所以如果客户发送

Accept: application/xml

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

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

如果您无法提供此类回复,则应使用适当的正文回复406 Not Acceptable状态代码。