1. @RequestMapping
1. 用于配置请求路径映射, 可以作用于类或方法上, 从而配置多级路径.
2. method属性可以支持RequestMethod枚举类型的数组, 表示可以支持何种类型的请求. 作用于类上的method属性会被方法上的method属性继承.
3. params属性需要一个String数组,用于表示请求中必须携带的属性,支持条件表达式
4. headers属性表示请求中必须携带的请求头
@Target({ElementType.TYPE, ElementType.METHOD}) // 可以作用于类以及方法上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {}; // 当前方法支持什么请求方式String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};
}
2. 请求参数绑定
1. 支持基本数据类型和字符串数据类型与name属性进行绑定
2. 支持将数据封装到JavaBean中
@RequestMapping("test02")
// 这里请求中有中文会乱码
// 引用数据类型的封装
// user.username user.password
public String testParam2(Account account) {System.out.println(account);return "success";
}
<form action="param/test02" method="post"><label for="username">姓名:<input id="username" type="text" name="user.username"></label><label for="password">密码:<input id="password" type="text" name="user.password"></label><label for="salary">薪水:<input id="salary" type="text" name="salary"></label><input type="submit" value="提交">
</form>
3. 集合数据类型绑定
3. @RequestParam
用于前端数据name与后台属性的变量名字不一致, 可以通过该注解进行转换
@RequestMapping("test06")// 疑惑 required和defaultpublic String testParam6(@RequestParam("name") String username) {System.out.println(username);return "success";}
4. @RequestBody 直接获取请求体的内容
@RequestMapping("test07")// 对post请求生效public String testParam(@RequestBody String body) {System.out.println(body);return "success";}
5. @PathVariable 用于Restful风格路径映射
// @PathVariable// Rest风格 根据请求方式 决定处理方式@RequestMapping("test08/user/{id}")public String testParam8(@PathVariable String id) {System.out.println(id);return "success";}
6. 使用前端隐藏对象对请求类型进行转变,待补充...
7. @RequestHeader 获取请求消息头的值
@RequestMapping("test09")// 必须写value 否则报错public String testParam9(@RequestHeader("Accept") String header) {System.out.println(header);return "success";}
8. @CookieValue 获取Cookie中的值
@RequestMapping("test10")public String testParam10(@CookieValue("JSESSIONID") String c) {System.out.println(c);return "success";}
9. @ModelAttribute保证数据不完整时,使用数据库中的值会对返回的对象 进行表单中的数据赋值
1. 作用于方法上,会在执行请求处理方法前执行,返回的对象会再次使用Request的param值进行覆盖
@RequestMapping("test11")
public String testParam11(User user) {System.out.println(user);System.out.println("test()...");return "success";
}@ModelAttribute
public User show(String username) {System.out.println(username);System.out.println("show()执行了...");User user = new User();user.setUsername("root");user.setPassword(111);return user;
}
2. 作用于参数上
@RequestMapping("test12")public String testParam12(@ModelAttribute("abc") User user) {System.out.println(user);System.out.println("test()");return "success";}// 保证数据不完整时,使用数据库中的值// 会对返回的对象 进行表单中的数据赋值// 这里有问题 ? 待排查@ModelAttributepublic void show2(String username, Map<String, User> map) {System.out.println(username);System.out.println("show2()执行了...");User user = new User();user.setUsername("root");user.setPassword(111);map.put("abc", user);}
10. 存取值
@RequestMapping("test13")public String testParam13(Model model) {model.addAttribute("msg", "二哈");return "success";}@RequestMapping("test14")public String testParam13(ModelMap model) {Object msg = model.get("msg");System.out.println(msg);return "success";}@RequestMapping("test14")public String testParam14(SessionStatus status) {// 从Session中删值status.setComplete();return "success";}