1. 程式人生 > >GetMapping 和 PostMapping

GetMapping 和 PostMapping

 Spring4.3中引進了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping},來幫助簡化常用的HTTP方法的對映,並更好地表達被註解方法的語義。   以@GetMapping為例,Spring官方文件說:   @GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。該註解將HTTP Get 對映到 特定的處理方法上。   Difference between @GetMapping & @RequestMapping: @GetMapping does not support  the consumes attribute of @RequestMapping.

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

1 2 3 4 5 6 7 8 9 10 11 12 13 @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協議來保證資料安全)。