樓主在用Jersey開發Restful Webservice的時候碰到了這樣一個問題java
一樣一個方法實現,用@get定義和@post定義,@get能經過測試,而@post不能chrome
@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只是一種規範,好吧。。。從某種程度上,是的。json
可是當使用瀏覽器去測試它的時候,就不是了瀏覽器
經過瀏覽器的地址欄輸入地址,所訪問的URL都是get請求,所以若是以post定義方法,那麼因爲請求與實現的不一致,會返回405錯誤,method not allowed, The specified HTTP method is not allowed for the requested resource.安全
這歸根究竟是由於瀏覽器發送了get請求,而方法只能處理post請求,因此發生的錯誤app
多是這麼問題太low了,我網上找了一大圈都沒有找到答案,最後在stackoverflow上找到了解答post
http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed測試
他說的很好,若是想用瀏覽器作post的測試,那麼就下一個chrome的postman插件,完美解決你的問題加密
最後從360Doc上找到了Get和Post請求的區別,貼在這裏url
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協議來保證數據安全)。