欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【附】SpringMVC 注解总结

程序员文章站 2022-07-15 11:42:55
...

@RequestMapping

一、作用

用于建立请求 URL 和处理请求方法之间的对应关系

二、出现的位置

【1】类上:

代表请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。 它出现的目的是为了使我们的 URL 可以按照模块化管理:

例如:

账户模块 订单模块
/account/add /order/add
/account/update /order/update
/account/delete /order/delete

account / order 部分的 @RequsetMappding() 写在类上,使 URL 更加精细。

细节:

1、 URL 路径可以不编写 /,表示从应用的根目录开始

2、${ pageContext.request.contextPath } 也可省略不写,但路径上不能写 /

<a href="${pageContext.request.contextPath}/account/add">添加账户 </a>

<a href="account/findAccount">查询账户</a> 

【2】出现在方法上:

请求 URL 的第二级访问目录。


三、属性

属性 作用
value 用于指定请求的 URL。和 path 属性的作用一样。
method 用于控制请求的方式。 取值:
RequestMethod.GET、RequestMethod.POST
params 用于指定限制请求参数的条件。 它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。例如:
params = {“accountName”}:表示请求参数必须有 accountName
params = {“moeny!100”}:表示请求参数中 money 不能是 100。
headers 用于指定限制请求消息头的条件。

注意: 以上四个属性只要出现 2 个或以上时,他们的关系是 && 的关系。


method 属性的示例

method = RequestMethod.POST —> 必须是 POST请求。

@RequestMapping(value="/saveAccount",method = RequestMethod.POST) 
public String saveAccount() {  
	System.out.println("保存了账户");  
	return "success"; 
} 
<!-- 请求方式的示例 --> 
<a href="account/saveAccount">保存账户,get 请求</a> 

<form action="account/saveAccount" method="post"> 
 	<input type="submit" value=" 保存账户,post请求 "> 
</form> 
当使用 get 请求时,提示错误信息是 405,信息是方法不支持 get 方式请求 

params 属性的示例

@RequestMapping(value="/saveAccount", params= {"accountName","money>100"}) 
public String saveAccount() {  
	System.out.println("删除账户");  
	return "success"; 
} 
<a href="account/removeAccount?accountName=aaa&money>100">删除账户,金额 100</a> <br/> 
<a href="account/removeAccount?accountName=aaa&money>150">删除账户,金额 150</a> 

当点击第一个超链接时,可以访问成功。  
当点击第二个超链接时,无法访问。--> 400

@ RequestParam

作用: 把请求中指定名称的参数给控制器中的形参赋值。

属性 意义
value 指定请求参数中的名称
required 请求参数中是否必须提供此参数。
默认值:true。表示必须提供,当required 为 true 时,如果请求中必须提供此参数,不提供将报错

示例:

<a href="springmvc/useRequestParam?name=test">requestParam 注解</a> 
@RequestMapping("/useRequestParam") 
public String useRequestParam(@RequestParam("name")String username,       
							  @RequestParam(value="age", required=false)Integer age){  
	System.out.println(username + "," + age);  
	return "success";
}

表示在请求中,必须提供 key 为 name 的参数。


@ RequestBody

作用: 用于获取请求体内容。直接使用得到是 key=value&key=value… 结构的数据。 GET 请求方式不适用。

属性 意义
required 是否必须有请求体。默认值是:true。
如果取值为 true 时, get 请求方式会报错。
如果取值为 false,get 请求得到是 null。

示例:

@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required = false) String bodyMsg){  	
	System.out.println(bodyMsg);  
	return "success"; 
} 
post 请求运行结果: username=xxx&password=xxx
get :null
<form action="springmvc/useRequestBody" method="post"> 
   用户名称:<input type="text" name="username"> <br/>  
   用户密码:<input type="password" name="password">
   <input type="submit" value=" 保存 "> 
</form>
 
<a href="springmvc/useRequestBody?bodyMsg = test">get请求</a> 

@ PathVaribale

作用: 用于绑定 url 中的占位符。

  • 例如:请求 url 中: /delete/{id},{id} 就是 url 占位符。 Spring3.0 之后加入 url 支持占位符。是 SpringMVC 支持 Rest 风格 URL 的一个重要标志。
属性 意义
value 用于指定 url 中占位符名称
required 是否必须提供占位符。

示例:

@RequestMapping("/PathVariable_DEMO/{uid}")
public String PathVariable_DEMO(@PathVariable String id){
	System.out.println(id);  	//输出 100
	return "success"; 
}
<a href="springmvc/PathVariable_DEMO/100">pathVariable注解</a> 

@ RequestHeader

作用: 用于获取请求消息头。

属性 意义
value 提供消息头名称,用于获取该头信息
required 是否必须有此消息头

注: 在实际开发中一般不怎么用。

示例:

@RequestMapping("/useRequestHeader") 
public String useRequestHeader(@RequestHeader(value="Accept-Language", 
   							    required = false)String requestHeader{
   	System.out.println(requestHeader); 
   	return "success"; 					
}
<a href="springmvc/useRequestHeader">获取请求消息头</a> 

@ CookieValue

作用: 用于把指定 cookie 名称的值传入控制器方法参数。

属性 意义
value 指定 cookie 的名称。
required 是否必须有此 cookie。

示例:

@RequestMapping("/useCookieValue") 
public String useCookieValue(@CookieValue(value="JSESSIONID", 
							  	required=false) String cookieValue){  
	System.out.println(cookieValue);  
	return "success"; 
}
<a href="springmvc/useCookieValue">绑定浏览器cookie的值</a> 

@ ModelAttribute

作用: 该注解是 SpringMVC4.3 版本以后新加入。它可以用于修饰方法和参数。

  • 出现在方法上:表示当前方法会在控制器的方法执行之前,先执行。它可任意方法。

  • 出现在参数上:获取指定的数据,并给参数赋值。

属性 意义
value 用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。

应用场景:

当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

方式一:出现在方法上

<form action="anno/testModelAttribute" method="post">
    用户姓名:<input type="text" name="uname"/><br/>
    用户年龄:<input type="text" name="age"/><br/>
   			 <input type="submit" value="提交"/>
</form>

假如 User 有 uname、age、data 字段,但是只是提交了 2 个字段。

@RequestMapping("/testModelAttribute")  
public String testModelAttribute(User user) {   
	System.out.println("该user是在showModel()中返回的user" + user.toString());  
	return "success";  	
}
@ModelAttribute
public User showModel(String name) { 
	User user = findByName(name);	//查询数据库 
	return user;
}
假如没有 @ModelAttribute 方法,当传递2个参数(不完整)时,date就会输出 null,
而当反之,输出user之前,查询了 数据库,返回的user对象,输出时date就有了!

方式二:出现在参数上

@RequestMapping("/testModelAttribute")  
public String testModelAttribute(@ModelAttribute("userKey") User user) {   
	System.out.println("该user是在showModel()中设置的user" + user.toString());  
	return "success";  	
}
@ModelAttribute
public void showModel(String name) { 
	User user = findByName(name);	//查询数据库 
	map.put("userKey", user);
}

@ SessionAttribute

作用:只作用在类上,用于多次执行控制器方法间的参数共享。

属性:

属性 意义
value 用于指定存入的属性名称
type 指定存入的数据的类型。

示例:

<a href="springmvc/testPut">存入 SessionAttribute</a> <hr/> 
<a href="springmvc/testGet">取出 SessionAttribute</a> <hr/> 
<a href="springmvc/testClean">清除 SessionAttribute</a> 
@RequestMapping("/springmvc")
@SessionAttributes(value = {"username, "password", "age"}, 
				   types={String.class, Integer.class})
public class SessionAttributeController { 
	 @RequestMapping("/testPut")    
	 public String testPut(Model model){    //反射创建实现类       
	 	 System.out.println("向session域中保存数据")
		 model.addAttribute("username", "泰斯特");           
		 model.addAttribute("password","123456");           
		 model.addAttribute("age", 31); 
		  //跳转之前将数据保存到 username、password 和 age 中,
		  ///因为注解 @SessionAttribute 中有这几个参数  
		 return "success";
	 }
	 
	  @RequestMapping("/testGet")       
	  public String testGet(ModelMap model){           
		  String username = (String) modelMap.get("username");        
		  String password = (String) modelMap.get("password"); 
		  Integer age = (Integer) modelMap.get("age"); 
		  return "success";       
	  }  
	  
	  @RequestMapping("/testClean")        
	  public String complete(SessionStatus sessionStatus){         
	   	  sessionStatus.setComplete();     //将状态设置为 "完成"
	   	  return "success";        
	  }
}

Model 是 Spring 提供的一个接口,ExtendedModelMap继承并实现了ModelMap,而 ModelMap 就是 LinkedHashMap 的子类。