我正在使用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的格式有关(中间有各种“ - ”)。如果是,我该怎么办?
答案 0 :(得分:0)
您可以尝试使用encodeURIComponent(param);
答案 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的快速反应。
保留或删除此问题的决定完全取决于员工。