微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

泽西岛HTTP删除,放入响应状态:405不允许使用方法

如何解决泽西岛HTTP删除,放入响应状态:405不允许使用方法

第1天:在其余端点下方添加删除操作。

@Path("/company/v1/department")
@Component
public class ManageResource {

@DELETE
@Path("/{identifier}/{identifier_value}/employee")
public void delete(@PathParam("identifier") String identifier,@PathParam("identifier_value") final String identifierValue,@QueryParam("age") final String age) {

 //delete operation
}
}

我可以使用邮递员在以下请求中调用DELETE端点:

DELETE: http://localhost:8080/company/v1/department/name/baner/employee?age=50

第2天:在其余端点的下方添加了同一资源中的更新操作。

@Path("/company/v1/department")
@Component
public class ManageResource {

@DELETE
@Path("/{identifier}/{identifier_value}/employee")
public void delete(@PathParam("identifier") String identifier,@QueryParam("age") final String age) {
   
//delete operation
}

@PUT
@Path("/empid/{value}/employee")
@Consumes(MediaType.APPLICATION_JSON)
public void update(@PathParam("value") final String identifierValue,@RequestBody final EmployeeUpdateRequest request) {
   
//update operation
}
}

添加此新端点后,我可以使用邮递员通过以下请求调用PUT:

PUT: http://localhost:8080/company/v1/department/empid/epid-123/employee
{
//Json request body
}

但是,当我尝试调用Delete终结点时,出现405(不允许使用方法错误。 如果我评论新的Put方法,则Delete方法可以正常工作。 另外,如果我将Put方法的Path替换为“ / {identifier} / {identifier_value} / employee”,则Delete和Put方法都可以正常工作。

我正在使用带有Tomcat的Jersey 1.19。 有人可以帮我吗?

解决方法

您的路径相互冲突。让我尝试解释一下:

DELETE = /{identifier}/{identifier_value}/employee 
PUT = /empid/{value}/employee

这意味着当我们评估从左到右的路径时,我们可以 {identifier}是任何东西或 “ empid”是固定字符串

Jersey始终尝试为REST端点找到“最完美”的匹配项。它通过评估从左到右的路径来实现。 固定字符串始终优先于随机变量!

基本上,这意味着当您要调用DELETE时,变量“ {identifier}”的值不能为“ empid”,因为那样便已经超出范围

因此删除调用

http://localhost:8080/company/v1/department/empid/empid-123/employee

将不起作用,因为Jersey必须决定请求中的“ empid”是否匹配“ {identifier}”(DELETE)或“ empid”(PUT)。正如我在上面试图解释的那样,固定字符串具有更高的优先级。 相反,任何其他DELETE请求都在其中

http://localhost:8080/company/v1/department/{identifier}/empid-123/employee

{identifier} != "empid"

有效。

可能的解决方案:

使其余端点面向资源

删除: / employee / {employee-id}

输入: / employee / {employee-id}

请注意端点的相同性,因为除了大多数系统中的ID之外,不需要任何信息来标识实体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。