2013-10-09 21 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'。 –

相关问题