415不支持的媒体类型 - 不适用于GET

时间:2015-12-10 23:04:36

标签: java rest

我有一个休息呼叫,它返回会话用户的名字

@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类型异常。 我有其他几乎相同的电话,工作正常。我无法弄清楚这个问题。

1 个答案:

答案 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的工作原理。