springmvc注解
<!-- 配置handerAdapter 适配器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven />
<!-- spring容器扫描指定包下的所有类,如果类上有注解 那么根据注解产生相应bean对象已经映射信息 -->
<context:component-scan base-package="cn.sxt.controller"/>
1、 SessionAttributes:
ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。
这一功能是通过类定义处标注 @SessionAttributes 注解来实现的
@SessionAttributes("user"),向session写入user
只能放在类上,将requestcope的数据备到session
|
1
2
3
4
5
6
7
8
|
@SessionAttributes("user")public class LoginController { @RequestMapping("/login.do") public String loginUser(String name,ModelMap map){ //如果@SessionAttributes有modelmap中的key,那么会将值设置到session中 map.addAttribute("user", name); return "forward:/WEB-INF/jsp/index.jsp"; } |
2、@ModelAttribute:
方法体上:
先逐个调用在方法级上标注了
@ModelAttribute 的方法,然后将该模型参数放入doHello4()函数的Map参数中
参数上:
SpringMVC先从模型数据中获取对象,再将请求参数绑定到对象中,再传入形参,并且数据模型中的对象会被覆盖。
|
1
2
3
4
5
6
7
8
9
|
@ModelAttribute("user1") public User getUser() { User user = new User(); user.setId(1L); user.setName("jjjj"); user.setPassword("iiiii"); return user; } |
|
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping(value = "hello7") public ModelAndView doHello6( @ModelAttribute("user1") User user, ModelAndView modelAndView) { System.out.println(user + ":hello7"); modelAndView.setViewName("redirect:/hello/hello4.do"); return modelAndView; } |
|
1
2
|
@DateTimeFormat(pattern="yyyy-MM-dd")private Date birthday; |
3、Controller类:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@Controllerpublic class HellController { //通过使用@RequestMapping 注解 可以指定请求的url�?映射到该方法�?// @RequestMapping(value="/hi.do") @RequestMapping("/helo.do") public ModelAndView hello(){ System.out.println("dsf"); ModelAndView mv = new ModelAndView(); mv.setViewName("hell"); mv.addObject("msg", "annotation ssindddmc-"); return mv; }//public class HellController { @RequestMapping("helo1.do") public ModelAndView show2(HttpServletRequest req){ System.out.println("dddf"); req.setAttribute("msg", "req携带参数"); return new ModelAndView("hell"); }} |
4、RequestBody,实体对象的json作为参数
@RequestBody 注解则是将 HTTP 请求正文插入方法中
实体反序列化过程
application/json或者是application/xml
|
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping(value="/body.do",method = RequestMethod.POST,consumes = "application/json") //将会把返回值 转换为json对象 @ResponseBody public List<User> json(@RequestBody User user){//post传参:raw格式json。{"name":"f","id":23,"age":3} List<User> list = new ArrayList<User>(); list.add(new User(1,"zhansan",22)); list.add(user);// return "forward:index1.jsp"; return list; } |
${user }<br>
${user.get(0).name}<br>
${user[0].id}
4、ResponseBody,
实体序列化过程
可定以在类上,即RestController
返回json
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用
在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中
|
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping(value="/json.do",method = RequestMethod.GET)@ResponseBody//将会把返回值 转换为json对象public List<User> json(){ List<User> list = new ArrayList<User>(); list.add(new User(1,"zhansan",22)); list.add(new User(2,"wangwu",21)); list.add(new User(3,"zhaosi",33)); return list;} |
5、@RequestMapping 后,返回值通常解析为跳转路径
6 、@ControllerAdvice,处理异常
@PathVariable绑定URI模板变量值
|
1
2
3
|
@RequestMapping("/{userId}/ac.do")public ModelAndView ac(@RequestParam(value="username", required=true, defaultValue="zhang") String a, @PathVariable(value="userId") String userId){ |
@RequestParam使用示
相当于request.getParameter(“参数名”)
|
1
2
3
4
5
6
|
public ModelAndView hello(@RequestParam(value="ids", required=true, defaultValue="111") Integer id,Model map){ System.out.println("id=="+id);// return null; map.addAttribute("id", id); return new ModelAndView("hello"); } |
@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上
@ModelAttribute绑定请求参数到命令对象
@CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上
@Value用于将一个SpEL表达式结果映射到到功能处理方法的参数上
@Valid在参数类上和@NotEmpty在实体上,控制参数不为空。
2、清心寡欲、方能高枕无忧。
3、纸上得来终觉浅,绝知此事要躬行。
种一棵树最好的时间是 十年前。 其次是, 现在!


浙公网安备 33010602011771号