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