常用注解
-
RequestParam注解
1. 作用: 1.为处理器的参数指定默认值@RequestParam(defaultValue="0") 2.解决处理器的参数名和请求路径的变量名不一致@RequestParam(value="id") 3.可以将浏览器请求路径上多个同名的变量赋值到一个集合中:请求名?uid=1&uid=3.. 2. 属性 1. value:请求参数中的名称 2. required:请求参数中是否必须提供此参数,默认值是true,必须提供 3. 代码如下 * 第一个 @RequestMapping("a1") public String demo1(@RequestParam(defaultValue="3")int uid) { System.out.println(uid); return "login"; } * 第二个 @RequestMapping(path="/hello") public String sayHello(@RequestParam(value="username",required=false)String name) { System.out.println("aaaa"); System.out.println(name); return "success"; } * 第三个 @RequestMapping("a3") public String demo3(@RequestParam("uid") List<Integer> ids) { System.out.println("uid="+ids); return "main"; } @RequestMapping("a4") public String demo4(int[] uid) { System.out.println("uid="+Arrays.toString(uid)); return "main"; }
-
RequestBody注解
1. 作用:用于获取请求体的内容(注意:get方法不可以) 直接使用得到是 key=value&key=value...结构的数据。 2. 属性 required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。 如果取值为 false,get 请求得到是 null。 3. 代码如下 @RequestMapping(path="/hello") public String sayHello(@RequestBody(required=false) String body) { System.out.println("aaaa"); System.out.println(body); return "success"; } 4. 作用到方法上时,表示方法返回的字符串作为http响应内容返回 @RequestMapping("r1")//方法返回的字符串作为http响应内容返回 @ResponseBody public String demos() { return "<h1>main</h1>"; } @RequestMapping(value="r1",produces="text/html;charset=UTF-8") public @ResponseBody String testResponse1() { return "<h1>你要干嘛</h1>"; }
-
PathVariable注解
1.作用: 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。 url支持占位符是spring3.0之后加入的。是springmvc支持rest风格 URL 的一个重要标志。 2.属性: value:用于指定 url 中占位符名称。 required:是否必须提供占位符。 3. Restful风格的URL 1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法 2. restful风格的URL优点 1. 结构清晰 2. 符合标准 3. 易于理解 4. 扩展方便 4. 代码如下 <a href="user/hello/1">入门案例</a> @RequestMapping(path="hello/{sid}") public String sayHello(@PathVariable(value="sid") String id) { System.out.println(id); //1 return "success"; }
-
RequestHeader注解
1. 作用:获取指定请求头的值 2. 属性 1. value:请求头的名称 2. required:是否必须有此消息头 3. 代码如下 @RequestMapping(path="/hello") public String sayHello(@RequestHeader(value="Accept-Language",required=false) String header) { System.out.println(header); return "success"; }
-
CookieValue注解
1. 作用:用于获取指定cookie的名称的值 2. 属性 1. value:cookie的名称 2. required:是否必须有此 cookie。 3. 代码 @RequestMapping(path="/hello") public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue) { System.out.println(cookieValue); return "success"; }
-
ModelAttribute注解
1. 作用 1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。 它可以修饰没有返回值的方法, 也可以修饰有具体返回值的方法。 注意:该方法可以有返回值,同时在当前请求中可以获得该返回值,默认返回值对应的变量名为类型首字母小写作为变量名,也可以自己手动指定变量名,例如@ModelAttribute("msg")则变量名为msg. 2. 出现在参数上:获取指定的数据给参数赋值。或者是将变量绑定到model里,等价于m.addAttribute("id", id); 注意: 语法:@ModelAttribute("变量名a") 非自定义类型 变量名a @ModelAttribute("任意定义") 自定义类型 变量名a ,("任意定义")也可以省略不写,默认变量名为自定义类型首字母小写 2. 属性: value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。 3. 应用场景 1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。 4. 具体的代码 1. 修饰的方法有返回值 /** * 作用在方法,先执行 * @param name * @return */ @ModelAttribute public User showUser(String name) { System.out.println("showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName("哈哈"); user.setPassword("123"); user.setMoney(100d); return user; } /** * 修改用户的方法 * @param cookieValue * @return */ @RequestMapping(path="/updateUser") public String updateUser(User user) { System.out.println(user); return "success"; } 案例二: @ModelAttribute("msg") public String an8(Model m,@ModelAttribute User u) { System.out.println("处理器在执行之前都会执行该方法"); return "main"; } 2. 修饰的方法没有返回值 /** * 作用在方法,先执行 * @param name * @return */ @ModelAttribute public void showUser(String name,Map<String, User> map) { System.out.println("showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName("哈哈"); user.setPassword("123"); user.setMoney(100d); map.put("abc", user); } /** * 修改用户的方法 * @param cookieValue * @return */ @RequestMapping(path="/updateUser") public String updateUser(@ModelAttribute(value="abc") User user) { System.out.println(user); return "success"; } 3. 修饰参数 http://localhost:8080/springmvc_day01/an7?uname=joy @RequestMapping("an7") public String an7(Model m,@ModelAttribute User u) { //@ModelAttribute 等价于 m.addAttribute("user", u); return "login"; }
-
SessionAttributes注解
1. 作用:用于多次执行控制器方法间的参数共享 2. 属性 1. value:指定存入属性的名称 2. type:用于指定存入的数据类型。 3. 代码如下 @Controller @RequestMapping(path="/user") @SessionAttributes(value= {"username","password","age","b"},types= {String.class,Integer.class}) // 把数据存入到session域对象中 public class HelloController { /** * 向session中存入值 * @return */ @RequestMapping(path="/save") public String save(Model model) { System.out.println("向session域中保存数据"); // 底层会存储到request域对象中 model.addAttribute("username", "root"); model.addAttribute("password", "123"); model.addAttribute("age", 20); map.put("b", "eee"); return "success"; } /** * 获取值 * @param modelMap * @return */ @RequestMapping(path="/find") public String find(ModelMap modelMap) { String username = (String) modelMap.get("username"); String password = (String) modelMap.get("password"); Integer age = (Integer) modelMap.get("age"); System.out.println(username + " : "+password +" : "+age); return "success"; } /** * 清除 * @param status * @return */ @RequestMapping(path="/delete") public String delete(SessionStatus status) { status.setComplete(); return "success"; } } 8. RequestMapping 注解 * 作用: 用于建立请求 URL 和处理请求方法之间的对应关系。 * 属性: // 控制器类 @Controller @RequestMapping(path="/user") public class HelloController { /** * RequestMapping注解 * @return */ @RequestMapping(value="/testRequestMapping",params = {"username=heihei"},headers = {"Accept"}) public String testRequestMapping(){ System.out.println("测试RequestMapping注解..."); return "success"; } } <!-- a链接发送的是 get方式 --> <a href="user/testRequestMapping?username=heihei">RequestMapping注解</a> value:用于指定请求的 URL。它和 path 属性的作用是一样的。 method:用于指定请求的方式。eg: method= {RequestMethod.POST} params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。 例如: params = {"accountName"},表示请求参数必须有 accountName params = {"moeny!100"},表示请求参数中 money 不能是 100。 params = {"moeny>100"},表示请求参数中 money 大于 100。 headers:用于指定限制请求消息头的条件。 注意: 1.以上四个属性只要出现 2 个或以上时,他们的关系是与的关系。 2.若类上还有方法上都有该注解,同时注解里的请求名都省略,这时称该方法为一个默认请求的方法 即在访问http://localhost:8080/springmvc01/时默认优先访问静态欢迎页, 若没有静态欢迎页则访问后台的默认请求。