<!-- 配置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
|
@Controller public 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在实体上,控制参数不为空。