前端傳到Controller:
方法1
通過HttpServletRequest 。
寫法如下:
HttpServletRequest類是Servlet中的類型,代表了一個Servlet請求。無論Post還是Get請求,都能通過這種方式獲取到。
可以通過Post方法,使用Postman工具模擬一個post請求,都可以將值傳到Controller。
這招可以獲得Cookie以及Session數據。
還可以通過註解@Autowired,將HttpServletRequest 自動的注入進來,不必擔心多線程下的併發問題,因為這裡HttpServletRequest注入的是一個AOP proxy ,而不是一個普通bean 。每次請求過來,都會檢查線程本地屬性,來獲取真正的Request對象。這些都是Spring自動配置的默認場景。
但是不推薦使用這個方法,因為這種方法破壞了對一個注入對象的常規理解,造成混亂。
代碼如下:
方法2
使用路徑變量。
寫法如下:
@RequestMapping中的{}中即為路徑變量,該變量還需要在方法的參數值出現,並且標記@PathVariable。
通過URL匹配的方式既可以實現傳值,這是REST風格的一種傳值方式。
上面的例子,只需輸入URL:
http://127.0.0.1:8080/WebApp/print/ZhangSan/30
controller接收到傳值,輸出:
name:ZhangSan
age:30
@RequestMapping("/print/{name}/{age}")是@RequestMapping(Value="/print/{name}/{age}")的縮寫形式,本質上是一樣的。
方法3
參數名匹配的方式:
或者:
當請求傳入的參數名字和controller
中代碼的名字一樣的時候,兩種方式都可以,區別在於使用了註解@RequestParam,可以設置一個默認值來處理到null值。
@RequestParam(value=“name”, defaultValue=“John”)
但是如果請求中參數的名字和變量名不一樣的時候,就只能使用@RequestParam註解。
Controller代碼只能如下的寫法
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam(“user_name”) String name, @RequestParam(“user_age”)int age) {
…
}
儘量使用@RequestParam註解,因為這樣可以清晰的知道該參數來自Request,可讀性高。
方法4
傳遞請求頭中的參數,需要用到@RequestHeader註解,該註解將Header中的值綁定到參數上,可以獲取一個,多個或者所有的參數。
例如
或者
方法5
使用到@RequestBody註解,得到整個RequestBody的信息
@RequestBody可以將Json數據直接映射程Java對象。例如:
方法6
採用@ModelAttribute註解,命名匹配,Post中的參數值和Model中的參數值一致的話,會自動綁定到該值。
然後當Post的值中有name和age時,Controller中的user對象會自動附上值。
Controller傳遞到JSP
方法1
使用ModelAndView類,代碼如下:
JSP頁面中:
ModelAndView 初始化的時候,設置了view的名字,同時也把對象存起來,直接傳給view。簡單實用。
方法2
使用Model或者ModelMap
(Model是一個接口,ModelMap實現了Model接口)
該方法和ModelAndView方法相似,只是Model和View分開來了,通過返回一個String來找到View,Model是注入到Controller的一個參數,通過對它添加屬性,在jsp端讀取值。代碼如下:
JSP頁面中: