@ModelAttribute
作用:在控制器方法执行之前优先执行
作用范围:方法,参数
如果@ModelAttribute添加在含有@RequestMapping的注解上,那么@RequestMapping就会失效,就会返回一个和路径一样的页面
- 没有返回值,接收单个
//访问路径 http://localhost:8983/model1/modelAttribute?username=张三
@ModelAttribute
public void testModelAttribute(User user){
// 对象中的属性名要和参数名一致
// 参数中对象的属性名可以和路径中参数名不一致
System.out.println("这里是ModelAttribute的方法:" + user.getUsername());
}
@RequestMapping("/modelAttribute")
public String test(User user){
System.out.println("这里是RequestMapping的方法:" + user);
return "success";
}
2. 没有返回值,使用map
//访问路径: http://localhost:8983/model3/modelAttribute2?username=张三
@ModelAttribute
public void testModelAttribute(String username,Map<String,User> map){
System.out.println("这里是ModelAttribute的方法:" + username);
User user = new User("李四", "13");
map.put("last",user);
}
@RequestMapping("/modelAttribute2")
public String test(@ModelAttribute(value = "last") User user){
System.out.println("这里是RequestMapping的方法:" + user);
return "success";
}
3. 有返回值
//访问路径: http://localhost:8983/model2/modelAttribute1?username=张三
@ModelAttribute
public User testModelAttribute(User user){
System.out.println("这里是ModelAttribute的方法:" + user);
user.setAge("123");
return user;
}
@RequestMapping("/modelAttribute1")
public String test(User user){ //这里的user参数是接收的上面的返回的user
System.out.println("这里是RequestMapping的方法user1:" + user);
return "success";
}
@SessionAttribute
作用:用于多次执行控制器方法间的参数共享。
作用范围:类
属性:
value:用于指定存入的属性名称
type:用于指定存入的数据类型。
@Controller
@RequestMapping("/sessionAttribute")
@SessionAttributes(value={"name","sex","modelMap","age"},types = Integer.class)
public class SessionAttribute1 {
// 存储数据
@RequestMapping("/put")
public String put(Model model, ModelMap modelMap){
//要想使用SessionAttributes存储数据,要使用Model来操作
// 添加方式1
modelMap.addObject("name","张三");
modelMap.addObject("sex","男");
modelMap.addObject("age",12);
modelMap.addObject("modelMap","这是modelMap");
// 添加方式2
modelMap.addAttribute("name","张三");
modelMap.addAttribute("sex","男");
modelMap.addAttribute("age",12);
modelMap.addAttribute("modelMap","这是modelMap");
// 添加方式3
model.addAttribute("name","张三");
model.addAttribute("sex","男");
model.addAttribute("age",12);
model.addAttribute("modelMap","这是modelMap");
return "success";
}
// 获取数据
@RequestMapping("/get")
public String get(ModelMap modelMap){
Object name = modelMap.get("name");
Object sex = modelMap.get("sex");
Object age = modelMap.get("age");
Object mm = modelMap.get("modelMap");
System.out.println("name: " + name);
System.out.println("sex: " + sex);
System.out.println("age: " + age);
System.out.println("mm: " + mm);
return "success";
}
// 删除数据
@RequestMapping("/clean")
public String clean(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
// 删除数据
@RequestMapping("/delete")
public String delete(ModelMap modelMap){
modelMap.clear();
//使用sessionStatus清理
return "success";
}
}
在另一个类中获取刚才存入的数据
@Controller
@RequestMapping("/sessionAttribute2")
//想要获取上个类中哪个属性,就在value中写要获取的name,不写获取的值为null
@SessionAttributes(value={"modelMap","name","sex","age"})
public class SessionAttribute2 {
// 获取数据
@RequestMapping("/get")
public String get(ModelMap modelMap){
Object name = modelMap.get("name");
Object sex = modelMap.get("sex");
Object age = modelMap.get("age");
Object mm = modelMap.get("modelMap");
System.out.println("name: " + name);
System.out.println("sex: " + sex);
System.out.println("age: " + age);
System.out.println("mm: " + mm);
return "success";
}
}
@RequestBody
作用:用于获取请求体内容,直接使用可以得到key=value&key=value的内容,get方式不适用;
作用范围:参数
依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
如果没有添加json格式依赖,参数可以是键值对形式和json形式以及文本形式,但是参数不会和实体类映射
@RequestMapping("request")
public String request(@RequestBody(required = false) String body){
try {
//body被urlencode编译.这里进行解码
body = URLDecoder.decode(body, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(body);
return "success";
}
请求参数
结果
添加了json格式支持,可以将参数与实体类映射
@RequestMapping("requestuser")
public String request(@RequestBody(required = false) User user){
System.out.println(user);
return "success";
}
请求参数
结果
@ResponseBody
作用:将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端
作用范围:方法
@RequestMapping("response")
public @ResponseBody User response(@RequestBody User user){
System.out.println(user);
return user;
}
请求参数
结果