用瀏覽器測試Get與Post Webservice,Post一直報405錯誤,而Get能夠成功的原因與解決方法


樓主在用Jersey開發Restful Webservice的時候碰到了這樣一個問題

 

同樣一個方法實現,用@get定義和@post定義,@get能通過測試,而@post不能

	@GET  //@POST
	@Path("/getUser")
	@Produces("application/json")   //@Consumes(application/x-www-form-urlencoded)
	public String getUserById(@QueryParam("loginID") String loginID) throws Exception {
		String users = null;
		CVCUserDAO dao = new CVCUserDAO();
		ArrayList<User> datas = dao.getUsers(loginID);
		Gson gson = new Gson();
		users = gson.toJson(datas);

		return users;
		// return "Hello World";
	}

  從來我以為get和post只是一種規范,好吧。。。從某種程度上,是的。

 

但是當使用瀏覽器去測試它的時候,就不是了

通過瀏覽器的地址欄輸入地址,所訪問的URL都是get請求,因此如果以post定義方法,那么由於請求與實現的不一致,會返回405錯誤,method not allowed,  The specified HTTP method is not allowed for the requested resource.

 

這歸根到底是因為瀏覽器發送了get請求,而方法只能處理post請求,所以發生的錯誤

 

可能是這么問題太low了,我網上找了一大圈都沒有找到答案,最后在stackoverflow上找到了解答

http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed

 

他說的很好,如果想用瀏覽器做post的測試,那么就下一個chrome的postman插件,完美解決你的問題

 

最后從360Doc上找到了Get和Post請求的區別,貼在這里

1. 哪一些情況下,瀏覽器會發送get請求

a. 直接在瀏覽器地址欄輸入某個地址

b. 點擊鏈接

c. 表單默認的提交方式

 

2. 哪一些情況下,瀏覽器會發送post請求?

a. 設置表單method = "post"

 

3. get請求的特點

a. 請求參數會添加到請求資源路勁的后面,只能添加少量參數(因為請求行只有一行,大約只能存放2K左右的數據)(2K左右的數據,看起來也不少。。。)

b. 請求參數會顯示在瀏覽器地址欄,路由器會記錄請求地址

 

4. post請求的特點

a. 請求參數添加到實體內容里面,可以添加大量的參數(也解釋了為什么瀏覽器地址欄不能發送post請求,在地址欄里我們只能填寫URL,並不能進入到Http包的實體當中)

b. 相對安全,但是,post請求不會對請求參數進行加密處理(可以使用https協議來保證數據安全)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM