[英]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.