SpingMVC的常用注解
1.RequestMapping注解
- RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
-
RequestMapping注解可以作用在方法和类上
- 作用在类上:第一级的访问目录
- 作用在方法上:第二级的访问目录
- 细节:路径可以不编写 / 表示应用的根目录开始
- ==细节:${ pageContext.request.contextPath }也可以省略不写,但是路径上不能写/==
-
RequestMapping的属性
- path 指定请求路径的url
- value value属性和path属性是一样的
- mthod 指定该方法的请求方式
- params 指定限制请求参数的条件
- headers 发送的请求中必须包含的请求头
2.RequestParam注解
- 把请求中的指定名称的参数传递给控制器中的形参赋值
-
属性
- value:请求参数中的名称
- required:表示请求参数中是否必须提供此参数,默认值是true,必须提供
public String sayHello(@RequestParam(value="username",required=false)String name)
3.RequestBody注解
- 用于获取请求体的内容(注意:get方法不可以)
- 属性:required:是否必须有请求体,默认值是true
public String sayHello(@RequestBody(required=false) String body)
4.PathVariable注解
- 拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性:value:指定url中的占位符名称
public String sayHello(@PathVariable(value="id") String id)
Restful风格的URL
- 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
-
restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
5.RequestHeader注解
- 获取指定请求头的值
- 属性:value:请求头的名称
public String sayHello(@RequestHeader(value="Accept") String header)
6.CookieValue注解
- 用于获取指定cookie的名称的值
- 属性:value:cookie的名称
public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue)
7.ModelAttribute注解
-
作用
- 出现在方法上:表示当前方法会在控制器方法执行前线执行。
- 出现在参数上:获取指定的数据给参数赋值。
- 应用场景:当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
修饰的方法有返回值
/**
* 作用在方法,先执行
* @param name
* @return
*/
@ModelAttribute
public User showUser(String name) {
System.out.println("showUser执行了...");
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
return user;
}
/**
* 修改用户的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(User user) {
System.out.println(user);
return "success";
}
修饰的方法没有返回值
/**
* 作用在方法,先执行
* @param name
* @return
*/
@ModelAttribute
public void showUser(String name,Map<String, User> map) {
System.out.println("showUser执行了...");
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
map.put("abc", user);
}
/**
* 修改用户的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(@ModelAttribute(value="abc") User user) {
System.out.println(user);
return "success";
}
ModelAttribute注释一个方法的参数
@ModelAttribute("user")
public User addAccount() {
return new User("jz","123");
}
@RequestMapping(value = "/helloWorld")
public String helloWorld(@ModelAttribute("user") User user) {
user.setUserName("jizhou");
return "helloWorld";
}
==在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。==
8.SessionAttribute注解
- 用于多次执行控制器方法间的参数共享。
-
属性:
- value:用于指定存入的属性名称
- type:用于指定存入的数据类型。
@Controller
@RequestMapping(path="/user")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class SessionAttributeController {
/**
* 把数据存入 SessionAttribute
* @param model
* @return
* Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap
* 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类
*/
@RequestMapping("/testPut")
public String testPut(Model model){
model.addAttribute("username", "泰斯特");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
//跳转之前将数据保存到 username、password 和 age 中,因为注解@SessionAttribute 中有这几个参数
return "success";
}
/**
*从session中获取值
*@return
*/
@RequestMapping("/testGet")
public String testGet(ModelMap model){
System.out.println(model.get("username")+";"
+model.get("password")+";"+model.get("age"));
return "success";
}
/**
* 从session中清除值
* @return
*/
@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。