我有一个休息呼叫,它返回会话用户的名字
@GET
@Produces(" text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
@Path(value = "getSessionUserName")
public Response getSessionUserName() {
try {
Session session = SessionManager.getCurrentSession();
String details = session.getUserDisplayName().toString();
return Response.ok(details).build();
}
catch(Exception e) {
return handleExceptions(e);
}
每次尝试访问此内容时,我都会收到415 Unsupported Media类型异常。 我有其他几乎相同的电话,工作正常。我无法弄清楚这个问题。
答案 0 :(得分:0)
@Produces
允许单个String媒体类型(不是具有多个逗号分隔媒体类型的单个字符串),或者是单字符串媒体类型的逗号分隔列表
@Produces("application/xml")
-or-
@Produces({"text/html","application/xhtml+xml","application/xml;q=0.9", "*/*;q=0.8"})
另外,您可能想要查看Content Negotiation上的维基百科文章。我想你可能不完全明白它是如何工作的。您的产品中有什么是浏览器发送的内容。它说希望将数据放回HTML,XHTML中,或者如果那些数据不可用,那么XML,如果不可用,那就给我任何东西。< / p>
但是在服务器端,您需要确定实际能够生成哪些类型。你真的可以生成HTML,你真的可以生成XHTML,你真的可以生成XML吗? @Produces
注释适用于内容协商。有&#34;广告&#34;您可以制作哪种媒体类型。客户端应发送一个Accept
标头,其中包含能够处理的媒体类型。那是谈判发生的地方。如果客户端想要一个类型,服务器无法生成,它将获得406 Not Acceptable错误。这就是ConNeg的工作原理。