[英]Jersey HTTP Delete,Put Response Status: 405 (Method Not Allowed)
第 1 天:在 rest 端点下方添加了删除操作。
@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 天:在同一资源中的更新操作的下面添加了 rest 端点。
@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
}
@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 (Method Not Allowed) 错误。 如果我评论我的新 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”,因为你已经超出了范围
所以 DELETE 调用
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 之外,不需要任何信息来识别实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.