Spring MVC常用注解
-
@RequestMapper
-
作用:建立请求URL和处理方法之间的对应关系
-
注解方式
-
作用在类上:第一级的访问目录
-
作用在方法上:第二级访问目录
-
细节:路径可以不使用/
-
-
属性
-
value/path:指定请求的url。value="user"
-
method:指定请求的方法,如POST、GET,PUT等 。method={RequestMethod.GET}
-
params:指定请求的参数名称或者值。params={"username"}或者是params={"username=hu"},请求的地址就必须是在最后面添加?username或者是?username=hu
-
headers:指定请求的头部信息。headers={"Accept"}
-
-
-
@RequestParam
-
作用:解决方法参数名称和前端传来的名称不一样
-
注解方式:作用在方法参数之前
-
属性
-
name:指定前端传来的参数名称。@RequestParam(name="name") String username
-
-
<a href="/user?name=胡先森">胡先森a>
@RequestMapping(name="user") public String myMethod(@RequestParam(name="name") String username){ System.out.println(username); //huxiansen return "user"; }
-
@RequestBody
-
作用:解决post请求封装的请求体,适用于post请求
-
注解方式:作用在方法参数之前
-
<form action="/user" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" value="提交" /> form>
@RequestMapping(name="user") public String myMethod(@RequestBody String body){ System.out.println(body); //username=aaa&password=111 return "user"; }
-
@PathVariable
-
作用:解决有占位符的地址
-
注解方式:作用在方法参数之前
-
<a href="/user/10">胡先森a>
@RequestMapping("user/{user_id}") public String myMethod(@PathVariable(name="user_id") String uid){ System.out.println(uid); //10 return "user"; }
-
@RequestHeader
-
作用:获取请求的消息头中某个值
-
注解方式:作用在方法参数之前
-
@RequestMapping("user/{user_id}") public String myMethod(@PathVariable(name="user_id") String uid, @RequestHeader(name="Accept") String accept){ System.out.println(uid); //10 System.out.println(accept); //。。。 return "user"; }
-
@CookieValue
-
作用:获取Cookie的里面相关信息值
-
注解方式:作用在方法参数之前
-
@RequestMapping("user/{user_id}") public String myMethod(@PathVariable(name="user_id") String uid, @RequestHeader(name="Accept") String accept, @CookieValue(name="JSESSIONID") String sessionID){ System.out.println(uid); //10 System.out.println(accept); //。。。 System.out.println(sessionID); //。。。 return "user"; }
-
@ModelAttribute
-
作用:用于修饰方法和参数
-
注解方式
-
作用在方法上:表示当前方法会在控制器的方法执行之前先执行,它可以修饰没有返回值的方法,也可以修饰有返回值的方法
-
作用在参数之前:获取指定的数据给参数赋值
-
-
应用场景:当表达提交的数据不完全是实体类类型的数据时,保证没有提交数据的字段使用数据库原来的对象(后一句可以是业务需求);实体类型的数据都会全部封装,无论之前的方法怎么修改,都是表单封装的数据。
-
作用在有返回值的方法
<form action="/user" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" value="提交" /> form>
@RequestMapping("user") public String testModelAttribute(User user){ System.out.println(user); // user={username=huxiansen,password=111,age=1} return "user"; } ? @ModelAttribute public User findByUsername(String username, String password){ // username需要对应前端的传来的名称 User user = new User(); user.setUsername(username); user.setPassword(password); user.setAge(1); return user; }
-
作用在没有返回值的方法,借助map集合
@RequestMapping("user") public String testModelAttribute(@ModelAttribute("user") User user){ System.out.println(user); //user={username=huxiansen,password=111,age=1} return "user"; } ? @ModelAttribute public void findByUsername(String username, String password, HashMap
map){ // username需要对应前端的传来的名称 User user = new User(); user.setUsername(username); user.setPassword(password); user.setAge(1); map.put("user", user); }
-
-
-
@SessionAttributes
-
作用:用于多次执行控制器方法间的参数共享
-
属性
-
value:用于指定存入的参数名称
-
type:用于指定存入的数据类型
-
<a href="/user/setSessionAttributes">设置SessionAttributesa> <a href="/user/getSessionAttributes">获取SessionAttributesa> <a href="/user/delSessionAttributes">删除SessionAttributesa>
-
点击第一个链接,会将设置的值添加到request域中,后在jsp页面使用EL表达式输出即可显现
import org.springframework.ui.Model; ? @RequestMapping(value="user/setSessionAttributes") public String setSessionAttributes(Model model){ model.addAttribute("message", "添加信息到requestScope中"); return "success"; }
<h5> ${requestScope} h5>
-
由于SessionAttributes的作用是参数共享,需要在类上添加此注解,并指定参数名称;控制台打印message值,也可以在jsp页面展现
@Controller @RequestMapping(value="user") @SessionAttributes("message") //将指定的值存放到session域中 public class UserController{ @RequestMapping(value="setSessionAttributes") public String setSessionAttributes(Model model){ model.addAttribute("message", "添加信息到requestScope中"); return "success"; } @RequestMapping(value="getSessionAttributes") public String setSessionAttributes(ModelMap modelMap){ String message = (String) modelMap.get("message"); System.out.println(message); // 添加信息到requestScope中 return "success"; } }
<h5> ${requestScope} h5> <h5> ${sessionScope} h5>
-
删除session域的值使用SessionStatus类中的setComplete方法
import org.springframework.web.bind.support.SessionStatus; ? @Controller @RequestMapping(value="user") @SessionAttributes("message") //将指定的值存放到session域中 public class UserController{ @RequestMapping(value="setSessionAttributes") public String setSessionAttributes(Model model){ model.addAttribute("message", "添加信息到requestScope中"); return "success"; } @RequestMapping(value="getSessionAttributes") public String setSessionAttributes(ModelMap modelMap){ String message = (String) modelMap.get("message"); System.out.println(message); // 添加信息到requestScope中 return "success"; } @RequestMapping(value="delSessionAttributes") public String delSessionAttributes(SessionStatus sessionStatus){ //将session域中的信息删除 sessionStatus.setComplete(); return "success"; } }
-