A. springmvc註解有哪些
常用的註解:
@Controller 作用:定義一個控制器;
@RequestMapping作用:是一個用來處理請求地址映射的註解,可用於類或方法上;
@Resource和@Autowired作用:bean的注入;
@PathVariable作用:將請求URL中的模板變數映射到功能處理方法的參數上;
@CookieValue作用:用來獲取Cookie中的值;
@RequestParam作用:將請求參數區數據映射到功能處理方法的參數上;
@SessionAttributes 作用:將值放到session作用域中,寫在class上面;
@ResponseBody作用:Java對象轉化為json對象,用於ajax處,返回的不是一個頁面而是一個某種格式的數據
如有幫助請採納(不懂請提問),可以看我主頁,歡迎來交流學習;
B. SpringMVC注入參數時為什麼必須要在註解中
存在的問題:在SpringMVC注入參數的時候,如@PathVariable、@RequestParam註解,我們都必須想下圖中的格式書寫,可能會有人存在疑問,為什麼變數名和傳遞的參數名相同,還需要在註解中重復的寫變數名呢?這個可以完全可以省略不寫的。其實這個觀點是錯誤的,這里我會給大家說明這是為什麼。
這樣就可以很好的解釋問題中所描述的情況,因此在書寫此類代碼的時候一定要注意不要忘記註解中的參數名和方法上的變數名保持一致。
閱讀全文
C. springMVC接收參數的幾種方式
獲取頁面參數的幾種方式
1、直接把表單的參數寫在Controller相應的方法的形參中
案例:
/**
* 1.直接把表單的參數寫在Controller相應的方法的形參中
*/
@RequestMapping("/add")
public String add(String username,String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "index";
}
2、通過HttpServletRequest接收
案例:
/**
* 2、通過HttpServletRequest接收
*/
@RequestMapping("/add")
public String add(HttpServletRequest request) {
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "index";
}
3、通過一個bean來接收
案例:
public class User {
private Long id;
private String username;
private String password;
public User(){}
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
/**
* 3、通過一個bean來接收
*/
@RequestMapping("/add")
public String add(User user) {
System.out.println("username is:"+user.getUsername());
System.out.println("password is:"+user.getPassword());
return "index";
}
4、通過@PathVariable獲取路徑中的參數
案例:
/**
* 4、通過@PathVariable獲取路徑中的參數
* @param username
* @param password
* @return
*/
@RequestMapping(value="/add/{username}/{password}",method=RequestMethod.GET)
public String addUser4(@PathVariable String username,@PathVariable String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "index";
}
D. springmvc用過哪些註解
spring mvc常用的註解:
個介紹。
@Controller
@Controller 負責注冊一個bean 到spring 上下文中,bean 的ID 默認為
類名稱開頭字母小寫,你也可以自己指定,如下
方法一:
@Controller
public class TestController {}
方法二:
@Controller("tmpController")
public class TestController {}
@RequestMapping
1.@RequestMapping用來定義訪問的URL,你可以為整個類定義一個
@RequestMapping,或者為每個方法指定一個。
把@RequestMapping放在類級別上,這可令它與方法級別上的
@RequestMapping註解協同工作,取得縮小選擇范圍的效果。
例如:
@RequestMapping("/test")
public class TestController {}
則,該類下的所有訪問路徑都在/test之下。
2.將@RequestMapping用於整個類不是必須的,如果沒有配置,所有的方法
的訪問路徑配置將是完全獨立的,沒有任何關聯。
3.完整的參數項為:@RequestMapping(value="",method =
{"",""},headers={},params={"",""}),各參數說明如下:
value :String[] 設置訪問地址
method: RequestMethod[]設置訪問方式,字元數組,查看RequestMethod
類,包括GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE,常用
RequestMethod.GET,RequestMethod.POST
headers:String[] headers一般結合method = RequestMethod.POST使用
params: String[] 訪問參數設置,字元數組 例如:userId=id
4.value的配置還可以採用模版變數的形式 ,例如:@RequestMapping
(value="/owners/{ownerId}", method=RequestMethod.GET),這點將在介
紹@PathVariable中詳細說明。
5.@RequestMapping params的補充說明,你可以通過設置參數條件來限制
訪問地址,例如params="myParam=myValue"表達式,訪問地址中參數只有
包含了該規定的值"myParam=myValue"才能匹配得上,類似"myParam"之類
的表達式也是支持的,表示當前請求的地址必須有該參數(參數的值可以是
任意),"!myParam"之類的表達式表明當前請求的地址不能包含具體指定的
參數"myParam"。
6.有一點需要注意的,如果為類定義了訪問地址為*.do,*.html之類的,則
在方法級的@RequestMapping,不能再定義value值,否則會報錯,例如
Java代碼
@RequestMapping("/bbs.do")
public class BbsController {
@RequestMapping(params = "method=getList")
public String getList() {
return "list";
}
@RequestMapping(value= "/spList")
public String getSpecialList() {
return "splist";
}
}
如上例:/bbs.do?method=getList 可以訪問到方法getList() ;而訪
問/bbs.do/spList則會報錯.
@PathVariable
1.@PathVariable用於方法中的參數,表示方法參數綁定到地址URL的模板
變數。
例如:
Java代碼
@RequestMapping(value="/owners/{ownerId}",
method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model
model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
2.@PathVariable用於地址欄使用{xxx}模版變數時使用。
如果@RequestMapping沒有定義類似"/{ownerId}" ,這種變數,則使用在
方法中@PathVariable會報錯。
@ModelAttribute
1.應用於方法參數,參數可以在頁面直接獲取,相當於
request.setAttribute(,)
2.應用於方法,將任何一個擁有返回值的方法標註上 @ModelAttribute,使
其返回值將會進入到模型對象的屬性列表中.
3.應用於方法參數時@ModelAttribute("xx"),須關聯到Object的數據類型
,基本數據類型 如:int,String不起作用
例如:
Java代碼
@ModelAttribute("items")//<——①向模型對象中添加一個名為items的
屬性
public List<String> populateItems() {
List<String> lists = new ArrayList<String>();
lists.add("item1");
lists.add("item2");
return lists;
}
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard(@ModelAttribute("currUser")User user,
ModelMap model) {
bbtForumService.getAllBoard();
//<——②在此訪問模型中的items屬性
System.out.println("model.items:" + ((List<String>)
model.get("items")).size());
return "listBoard";
}
在 ① 處,通過使用 @ModelAttribute 註解,populateItem() 方法將在
任何請求處理方法執行前調用,Spring MVC 會將該方法返回值以「items
」為名放入到隱含的模型對象屬性列表中。
所以在 ② 處,我們就可以通過 ModelMap 入參訪問到 items 屬性,當執
行 listAllBoard() 請求處理方法時,② 處將在控制台列印
出「model.items:2」的信息。當然我們也可以在請求的視圖中訪問到模型
對象中的 items 屬性。
@ResponseBody
這個註解可以直接放在方法上,表示返回類型將會直接作為HTTP響應位元組
流輸出(不被放置在Model,也不被攔截為視圖頁面名稱)。可以用於ajax。
@RequestParam
@RequestParam是一個可選參數,例如:@RequestParam("id") 註解,所以
它將和URL所帶參數 id進行綁定
如果入參是基本數據類型(如 int、long、float 等),URL 請求參數中
一定要有對應的參數,否則將拋出
org.springframework.web.util.NestedServletException 異常,提示無
法將 null 轉換為基本數據類型.
@RequestParam包含3個配置 @RequestParam(required = ,value="",
defaultValue = "")
required :參數是否必須,boolean類型,可選項,默認為true
value: 傳遞的參數名稱,String類型,可選項,如果有值,對應到設置方
法的參數
defaultValue:String類型,參數沒有傳遞時為參數默認指定的值
@SessionAttributes session管理
Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到
session 中,以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問
到這些屬性。這一功能是通過類定義處標注 @SessionAttributes 註解來
實現的。@SessionAttributes 只能聲明在類上,而不能聲明在方法上。
例如
@SessionAttributes("currUser") // 將ModelMap 中屬性名為currUser 的屬性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"})
@CookieValue 獲取cookie信息
@RequestHeader 獲取請求的頭部信息
E. spring mvc註解有哪些
@Controller
該註解用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 對象
@RequestMapping
該註解是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
@Resource和@Autowired
@Resource和@Autowired都是做bean的注入時使用,其實@Resource並不是Spring的註解,它的包是javax.annotation.Resource,需要導入,但是Spring支持該註解的注入。
@ResponseBody
該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response對象的body數據區。
@PathVariable
該註解用於將請求URL中的模板變數映射到功能處理方法的參數上,即取出uri模板中的變數作為參數。
@CookieValue
該註解用來獲取Cookie中的值;
@RequestParam
該註解用於將請求參數區數據映射到功能處理方法的參數上
F. SpringMVC請求參數獲取的幾種方法
1、直接把表單的參數寫在Controller相應的方法的形參中,適用於get方式提交,不適用於post方式提交。
G. spring MVC 怎麼獲取前端傳遞的數組參數
spring MVC controller獲取前端傳遞的數組參數的方法是進行封裝json字元串實現的。
1、jsp頁面中的數組創建如下:
var myArray = []; 定義數組myArray
myArray .push("OU=Software,DC=example,DC=com,"); 向數組中添加第一個字元串
myArray .push("OU=IT,DC=example,DC=com,");向數組中添加第二個字元串
轉換json數組:
myArray = JSON.stringify(myArray ); 利用json的stringify方法把js對象轉換成json對象
$("#ADOus").attr("action","${ctx}/ADSetting?myOUsArray ="+ myArray );設置action參數
$("#ADOus").submit();提交action到對應的controller
2、在controller層的處理如下:
@RequestMapping(value = { "/ADSetting" }, method=RequestMethod.POST) 定義url和提交方法,規定post
public String configureOUs(HttpServletRequest request,@RequestParam("myOUsArray ") String[] myOUsArray ){
ObjectMapper mapper = new ObjectMapper(); //創建對象映射對象
String [] array = mapper.readValue(jsonString, String[].class): //從映射域中讀取數組參數,以json 字元串的方式
接下來需要把接收到的參數轉換成json對象來處理。
return 定義的頁面
}
H. springmvc的註解都有哪些
spring mvc常用的註解:
@Controller
@Controller 負責注冊一個bean 到spring 上下文中,bean 的ID 默認為
類名稱開頭字母小寫,你也可以自己指定,如下
方法一:
@Controller
public class TestController {}
方法二:
@Controller("tmpController")
public class TestController {}
@RequestMapping
1.@RequestMapping用來定義訪問的URL,你可以為整個類定義一個
@RequestMapping,或者為每個方法指定一個。
把@RequestMapping放在類級別上,這可令它與方法級別上的
@RequestMapping註解協同工作,取得縮小選擇范圍的效果。
例如:
@RequestMapping("/test")
public class TestController {}
則,該類下的所有訪問路徑都在/test之下。
2.將@RequestMapping用於整個類不是必須的,如果沒有配置,所有的方法
的訪問路徑配置將是完全獨立的,沒有任何關聯。
3.完整的參數項為:@RequestMapping(value="",method =
{"",""},headers={},params={"",""}),各參數說明如下:
value :String[] 設置訪問地址
method: RequestMethod[]設置訪問方式,字元數組,查看RequestMethod
類,包括GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE,常用
RequestMethod.GET,RequestMethod.POST
headers:String[] headers一般結合method = RequestMethod.POST使用
params: String[] 訪問參數設置,字元數組 例如:userId=id
4.value的配置還可以採用模版變數的形式 ,例如:@RequestMapping
(value="/owners/{ownerId}", method=RequestMethod.GET),這點將在介
紹@PathVariable中詳細說明。
5.@RequestMapping params的補充說明,你可以通過設置參數條件來限制
訪問地址,例如params="myParam=myValue"表達式,訪問地址中參數只有
包含了該規定的值"myParam=myValue"才能匹配得上,類似"myParam"之類
的表達式也是支持的,表示當前請求的地址必須有該參數(參數的值可以是
任意),"!myParam"之類的表達式表明當前請求的地址不能包含具體指定的
參數"myParam"。
6.有一點需要注意的,如果為類定義了訪問地址為*.do,*.html之類的,則
在方法級的@RequestMapping,不能再定義value值,否則會報錯,例如
Java代碼
@RequestMapping("/bbs.do")
public class BbsController {
@RequestMapping(params = "method=getList")
public String getList() {
return "list";
}
@RequestMapping(value= "/spList")
public String getSpecialList() {
return "splist";
}
}
如上例:/bbs.do?method=getList 可以訪問到方法getList() ;而訪
問/bbs.do/spList則會報錯.
@PathVariable
1.@PathVariable用於方法中的參數,表示方法參數綁定到地址URL的模板
變數。
例如:
Java代碼
@RequestMapping(value="/owners/{ownerId}",
method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model
model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
2.@PathVariable用於地址欄使用{xxx}模版變數時使用。
如果@RequestMapping沒有定義類似"/{ownerId}" ,這種變數,則使用在
方法中@PathVariable會報錯。
@ModelAttribute
1.應用於方法參數,參數可以在頁面直接獲取,相當於
request.setAttribute(,)
2.應用於方法,將任何一個擁有返回值的方法標註上 @ModelAttribute,使
其返回值將會進入到模型對象的屬性列表中.
3.應用於方法參數時@ModelAttribute("xx"),須關聯到Object的數據類型
,基本數據類型 如:int,String不起作用
例如:
Java代碼
@ModelAttribute("items")//<——①向模型對象中添加一個名為items的
屬性
public List<String> populateItems() {
List<String> lists = new ArrayList<String>();
lists.add("item1");
lists.add("item2");
return lists;
}
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard(@ModelAttribute("currUser")User user,
ModelMap model) {
bbtForumService.getAllBoard();
//<——②在此訪問模型中的items屬性
System.out.println("model.items:" + ((List<String>)
model.get("items")).size());
return "listBoard";
}
在 ① 處,通過使用 @ModelAttribute 註解,populateItem() 方法將在
任何請求處理方法執行前調用,Spring MVC 會將該方法返回值以「items
」為名放入到隱含的模型對象屬性列表中。
所以在 ② 處,我們就可以通過 ModelMap 入參訪問到 items 屬性,當執
行 listAllBoard() 請求處理方法時,② 處將在控制台列印
出「model.items:2」的信息。當然我們也可以在請求的視圖中訪問到模型
對象中的 items 屬性。
@ResponseBody
這個註解可以直接放在方法上,表示返回類型將會直接作為HTTP響應位元組
流輸出(不被放置在Model,也不被攔截為視圖頁面名稱)。可以用於ajax。
@RequestParam
@RequestParam是一個可選參數,例如:@RequestParam("id") 註解,所以
它將和URL所帶參數 id進行綁定
如果入參是基本數據類型(如 int、long、float 等),URL 請求參數中
一定要有對應的參數,否則將拋出
org.springframework.web.util.NestedServletException 異常,提示無
法將 null 轉換為基本數據類型.
@RequestParam包含3個配置 @RequestParam(required = ,value="",
defaultValue = "")
required :參數是否必須,boolean類型,可選項,默認為true
value: 傳遞的參數名稱,String類型,可選項,如果有值,對應到設置方
法的參數
defaultValue:String類型,參數沒有傳遞時為參數默認指定的值
@SessionAttributes session管理
Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到
session 中,以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問
到這些屬性。這一功能是通過類定義處標注 @SessionAttributes 註解來
實現的。@SessionAttributes 只能聲明在類上,而不能聲明在方法上。
例如
@SessionAttributes("currUser") // 將ModelMap 中屬性名為currUser 的屬性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"})
@CookieValue 獲取cookie信息
@RequestHeader 獲取請求的頭部信息
I. springmvc常用的註解有哪些
1、@Controller
在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。在SpringMVC 中提供了一個非常簡便的定義Controller 的方法,你無需繼承特定的類或實現特定的介面,只需使用@Controller 標記一個類是Controller ,然後使用@RequestMapping 和@RequestParam 等一些註解用以定義URL 請求和Controller 方法之間的映射,這樣的Controller 就能被外界訪問到。此外Controller 不會直接依賴於HttpServletRequest 和HttpServletResponse 等HttpServlet 對象,它們可以通過Controller 的方法參數靈活的獲取到。
@Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 對象。分發處理器將會掃描使用了該註解的類的方法,並檢測該方法是否使用了@RequestMapping 註解。@Controller 只是定義了一個控制器類,而使用@RequestMapping 註解的方法才是真正處理請求的處理器。單單使用@Controller 標記在一個類上還不能真正意義上的說它就是SpringMVC 的一個控制器類,因為這個時候Spring 還不認識它。那麼要如何做Spring 才能認識它呢?這個時候就需要我們把這個控制器類交給Spring 來管理。有兩種方式:
(1)在SpringMVC 的配置文件中定義MyController 的bean 對象。
(2)在SpringMVC 的配置文件中告訴Spring 該到哪裡去找標記為@Controller 的Controller 控制器。
<!--方式一--><bean class="com.host.app.web.controller.MyController"/><!--方式二-->< context:component-scan base-package = "com.host.app.web" />//路徑寫到controller的上一層(掃描包詳解見下面淺析)
2、@RequestMapping
RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
RequestMapping註解有六個屬性,下面我們把她分成三類進行說明(下面有相應示例)。
1、 value, method;
value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);
method: 指定請求的method類型, GET、POST、PUT、DELETE等;
2、consumes,proces
consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;
proces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;
3、params,headers
params: 指定request中必須包含某些參數值是,才讓該方法處理。
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。
3、@Resource和@Autowired
J. 如何讓Spring MVC接收的參數可以轉換為java對象
可以使用@RequestBody註解:
@RequestMapping(value="user/saveUser"",method=RequestMethod.POST)
@ResponseBody
publicMap<String,Object>result(@RequestBodyUseruser){
userService.saveUser(user);
}
這個註解是將Json字元串轉換成java對象,所以需要在前端通過JSON.stringify()方法將json對象轉換成json字元串
varuser={"userName":"test","address":"gz"};
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(user),
success:function(data){
}
});
這只是一種方法,還可以使用fastjson工具包,將前端傳回的json字元串轉換成對應的java對象
或者List<User>
Useruser=JSON.parseObject(user,User.class);