2015-05-21 87 views
2

我使用澤西島,並且與GETPUT調用沒有任何問題,但由於某些原因POST拒絕工作;我一直得到405返回。在澤西島使用POST方法時返回405錯誤

我已經嘗試過在我的方法上簽名的多個排列,我開始懷疑是否還有別的東西丟失。

這裏有什麼行不通的例子:在使用JSON

Client client = Client.create(); 
WebResource webResource = client.resource("http://localhost:8888/api/v1").path("tmm").path("mypost"); 
String input = "{\"address\":\"myaddress\",\"user\":4}"; 
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, input); 

我意識到:

服務器端:

@Path("/tmm") 

public class TmmRes { 

@POST 
@Path("/mypost") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response postTest(String input) { 
    System.out.println("Made it to POST: "+input); 
    return Response.status(201).entity(input).build(); 
} 

}

客戶端我應該有一個輸入綁定的對象,但我簡化了複雜性讓事情奏效。

有人有什麼見解?順便說一下,我正在使用Tomcat (6.0.43)

+0

您是否嘗試過使用POSTMAN(Chrome應用程序,而不是Chrome瀏覽器擴展)執行相同的請求?所以你可以看到真正的HTTP請求,內容類型等等。似乎內容類型的文本/ json沒有正確完成。 –

+0

是的,我試過POSTMAN的結果。我想知道是否有什麼獨特的POST,需要一些額外的設置在服務器端。我也已經能夠得到刪除工作... – user3570396

+0

這個代碼它在我的設置下工作,要麼你錯過了路徑或有麻煩的版本的tomcat或者澤西島。你有沒有嘗試在這個特定的代碼中將所有的POST改爲PUT,並且工作正常?或者你有其他方法註釋與PUT工作? –

回答

0

OK,在朋友的幫助下,我能夠弄清楚這一點。我的網址正在重定向。這導致我的POST變成GET。感謝大家的幫助。您的確認消除了可能性,並幫助指導我找到答案。

0

我認爲你必須創建這樣一個POJO:

public class User { 

private String address; 
private Integer user; 

// getters and setters 

} 

,然後改變

@POST 
@Path("/mypost") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response postTest(String input) { 
    System.out.println("Made it to POST: "+input); 
    return Response.status(201).entity(input).build(); 
} 

到:

@POST 
@Path("/mypost") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response postTest(User input) { 
    System.out.println("Made it to POST: "+input); 
    return Response.status(201).entity(input).build(); 
} 
+0

是的,不幸的是它給了我同樣的問題。我想知道是否有某種我缺少的安全問題(雖然PUT,DELETE工作)。 – user3570396

+0

我不認爲這是任何安全問題。你能寄出你從郵遞員那裏得到的全部要求嗎? –

+0

這就是我要發送的內容:POST/api/v1/tmm/mypost HTTP/1。1個 主機:本地主機:8888 內容類型:應用/ JSON 緩存控制:無緩存 郵差令牌:8463180a-34B8-FDAD-5cd6-adbeb52e9d90 { 「用戶」: 「爲joeschmoe」, 「地址」:「這裏」 } – user3570396

0

我在IntelliJ中解決了這個問題。

轉到菜單:BUILD - > BUILD ARTIFACTS - > BUILD或REBUILD就是這樣。