RESTEASY如何让@PathParam匹配UUID?

时间:2013-07-01 17:42:19

标签: java ajax rest jboss resteasy

我正在使用RESTEasy和Jboss eap 6.1。

我有以下资源:

@Path("/sessions")
public class Sessions {
    @DELETE
    @Path("/{sessionId}/")
    public Response logout(@PathParam("sessionId") String sessionId)
    {
        //sessions.remove(sessionId);

        return Response.ok().build();
    }
}

sessionId是生成的UUID,其格式为9b3db022-84de-4ba2-8194-5ff7542bf86b

我从客户那里做了以下电话:

$.ajax({
    url: "/sessions/" + javaRest.cookie.get("sessionId") + "/",
    type: "DELETE",             
    success : //do something,
    error : //do something;
    )}

javaRest.cookie.get(cookieName)是一个查找给定cookieName的值的函数。

但是我收到了以下响应错误标题:

HTTP/1.1 403 Forbidden,
Server: Apache-Coyote/1.1,
Content-Type: text/html;charset=utf-8,
Content-Length: 1072,
Date: Mon, 01 Jul 2013 17:22:48 GMT

然后我使用与@GET资源相同的设置创建了另一个@DELETE。但是,这次响应标头是404 Not Found而不是403。

我怀疑它与UUID的格式有关(中间有各种“ - ”)。如果是,我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用encodeURIComponent(param);

在js中编码您的参数

答案 1 :(得分:0)

我找到了问题的答案。这对我来说是一个很小但非常重要的错误。

我写过我用过的问题:

$.ajax({
url: "sessions/" + javaRest.cookie.get("sessionId") + "/",
type: "DELETE",             
success : //do something,
error : //do something;
)}

但我自己并没有输入我在这里输入的内容。

我在客户端代码中使用sessions/而不是/sessions/。与破坏应用程序的方式相比,Ajax以/sessions/的方式解析sessions/

当应用程序部署在JBoss服务器上时,其URL类似于http://localhost:8080/AppName/

sessions/,ajax将网址解析为http://localhost:8080/AppName/sessions/。 但是,使用/sessions/时,网址将解析为http://localhost:8080/sessions/并中断应用程序。

我想我在这里愚弄了自己。但我要感谢Wilker Iceri的快速反应。

保留或删除此问题的决定完全取决于员工。