2013-11-24 54 views
3

我想使用jQuery Ajax删除记录并调用RESTful服务。但是,当我执行,我得到错误REST从jQuery中删除:方法不允许错误

The specified HTTP method is not allowed for the requested resource 
(Method Not Allowed). 

这是什么原因?

REST服务代码

@Path("/employee") 

@DELETE 
@Path("/{empNo}") 
@Produces(MediaType.APPLICATION_JSON) 
public void remove(@PathParam("empNo") short empNo) { 
getEmployeeService().delete(empNo); 
} 

jQuery的Ajax代码

$(document).ready(function() { 
    var empNo = 9870; 
    $("#btnSubmit").click(function() { 
     $.ajax({ 
      url: "http://localhost:8181/Test1/rest/employee", 
      type: "POST", 
      data: JSON.stringify(empNo), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
     }) 
    }); 
}); 

回答

3

使用DELETE类型,并通过与empNourl。由于delete方法只需要empNo,所以不需要data,dataType。

$(document).ready(function() { 
    var empNo = 9870; 
    $("#btnSubmit").click(function() { 
     $.ajax({ 
      url: "http://localhost:8181/Test1/rest/employee/" + empNo, // Pass empNo 
      type: "DELETE", // Use DELETE 
      // data: JSON.stringify(empNo), Commented these two. 
      // dataType: "json", 
     }) 
    }); 
}); 
+0

感谢这很有帮助 – user75ponic

+0

我有一个问题,但如果我想传递一个对象而不是字符串?例如。我的方法签名会喜欢'public void remove(@PathParam(“empNo”)emp emp){'。我将如何传递对象? – user75ponic

+1

'@ PathParam'可以'获取对象。您应该在方法和方法签名将plain,'void remove(emp emp)'前使用方法注释'@Consumes(“application/xml或json”)''。 – Masudul

1

您没有在网址

更改URL指定EMPNO:HTTP://本地主机:8181/Test1/rest/employee/9870

1

为什么类型不是DELETE?

此外,为什么员工编号不是路径的一部分,因为您使用@Path属性将其指定为路径的一部分?

1

DELETE用于删除由URI标识的资源。

成功删除后,返回HTTP状态200(确定)以及响应主体,可能是已删除项目的表示(通常需要太多带宽)或者包装响应。或者返回HTTP状态204(无内容)而没有响应主体。换句话说,推荐的响应是204状态,没有主体,或JSEND风格的响应和HTTP状态200。

您还需要指定EMPNO作为URL的一部分

修改代码如下,并尝试

type: 'DELETE', 
url: "http://localhost:8181/Test1/rest/employee" + '/' + empNo, 
相关问题