在springmvc中,注解几乎可以解决一切事情,所以熟练掌握注解是非常有必要的,下面让我们来看看它有哪些注解及该如何使用吧。
一、@Controller
@Controller 标记于一个类上,它标记过的类就是一个SpringMVC Controller 对象
package com.cqvie.handler; import org.springframework.stereotype.Controller; @Controller public class HelloWorld { @RequestMapping("/helloworld") public String sayHello() { System.out.println("Hello World!"); return "success"; } }
RequestMapping是一个用来处理请求地址映射的注解,适用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
/** * Rest 风格的 URL(以 CRUD 为例): * 新增:/order POST * 修改:/order/1 PUT * 获取:/order/1 GET * 删除:/order/1 DELETE * @param id * @return */ @RequestMapping(value = "/testRestPut/{id}", method = RequestMethod.PUT) public String testRestPut(@PathVariable int id) { System.out.println("testRestPut:" + id); return SUCCESS; } @RequestMapping(value = "/testRestDelete/{id}", method = RequestMethod.DELETE) public String testRestDelete(@PathVariable int id) { System.out.println("testRestDelete:" + id); return SUCCESS; } @RequestMapping(value = "/testRestPost/{id}", method = RequestMethod.POST) public String testRestPost(@PathVariable int id) { System.out.println("testRestPost:" + id); return SUCCESS; } @RequestMapping("/testRestGet") public String testRestGet() { System.out.println("testRestGet"); return SUCCESS; }
三、@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
@Controller public class TestController { @RequestMapping(value = "/user/{userId}/roles/{roleId}", method = RequestMethod.GET) public String getLogin(@PathVariable("userId") String userId , @PathVariable("roleId") String roleId) { System.out.println("User Id : " + userId); System.out.println("Role Id : " + roleId); return "hello"; } @RequestMapping(value = "/product/{productId}", method = RequestMethod.GET) public String getProduct(@PathVariable("productId") String productId) { System.out.println("Product Id : " + productId); return "hello"; } @RequestMapping(value = "/javabeat/{regexp1:[a-z-]+}" , method = RequestMethod.GET) public String getRegExp(@PathVariable("regexp1") String regexp1) { System.out.println("URI Part 1 : " + regexp1); return "hello"; } }
四、@RequestParam
@RequestParam适用于将请求参数区数据映射到功能处理方法的参数上
/** * @RequestParam("id") 带参映射 * @param id * @return */ @RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam("id") int id) { System.out.println("testRequestParam " + id); return "success"; }
五、@CookieValue
常用于获取Cookie中的值
/** * 获取 Session * JSESSIONID=411A032E02A2594698F6E3F4458B9CE4 */ @RequestMapping("/testCookieValue") public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { System.out.println("JSESSIONID = " + sessionId); return "success"; }
六、@SessionAttributes
@SessionAttributes即将值放到session作用域中,写于class上
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import com.cqvie.model.User; @SessionAttributes(value = { "user" }, types = { String.class }) @RequestMapping("/springmvc") @Controller public class SessionAttributesTest { /** * @SessionAttributes * 除了可以通过属性名指定需要放到会话中的属性外(value 属性值), * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)。 * 注意: 该注解只能放在类的上面,不能放在方法上面 * * @return */ @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map < String, Object > map) { User user = new User(1, "刘邦", "qwe", "123", "辽宁"); map.put("user", user); map.put("school", "重庆"); return "success"; } }
七、@ModelAttribute
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.cqvie.model.User; @Controller @RequestMapping("/springmvc") public class ModelAttributeTest { private static final String SUCCESS = "success"; /** * 1.有 @ModelAttribute 标记的方法,会在每个目标方法执行之前被 SpringMVC 调用 * 2.@ModelAttribute注解也可以修饰目标方法POJO类形的入参,其value的属性值有如下作用: * 1)SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则直接传入到目标方法的入参中 * 2)SpringMVC会以value为key,POJO类型的对象为value,存入的request中 * * @param id * @param map */ @ModelAttribute public void getUser(@RequestParam(value = "id", required = false) int id , Map < String, Object > map) { //模拟数据库中获取对象 User user = new User(1, "刘邦", "123", "023", "重庆"); System.out.println("从数据库中获取一个对象:" + user); map.put("abc", user); } /** * 运行流程: * 1.执行@ModelAttribute注解修饰的方法,从数据库中取出对象,把对象放入Map中,键为:user; * 2.SpringMVC从Map中取出User对象,并把表单的请求参数赋值给该User对象的对应属性; * 3.SpringMVC把上述对象传入目标方法的参数。 * * 注意:在@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致 * * @param user * @return */ @RequestMapping("/testModelAttribute") public String testModelAttribute(@ModelAttribute("abc") User user) { System.out.println("修改:" + user); return SUCCESS; } }
以上就是本篇文章的所有内容,如果想要了解更多java架构师知识,就请持续关注奇Q工具网。
推荐阅读: