1、@Controller
用于定义控制器类,控制器Controller 负责处理由DispatcherServlet
分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。
//指定这个类为控制器,可以同时处理多个请求动作
@Controller
public class HelloWorld {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
//返回HTTP Response body,直接请求直接是显示字符串 Hello!
return "Hello!";
}
@RequestMapping("/world")
public String world() {
//返回的 World页面,看配置,如HTML或者jsp
return "World";
}
}
2、@ResponseBody
返回的不是HTML和jsp标签的页面时,如数据格式为json、xml等,则该方法的返回结果直接写入HTTP Response body中。
(注:例子看1、)
3、@RestController
@Controller和@ResponseBody的合集。
(注:Spring4.0增加的,继承自@Controller)
//相当于 @Controller 和 @ResponseBody
@RestController
public class HelloWorld {
@RequestMapping("/hello")
public String hello() {
//返回HTTP Response body,直接请求直接是显示字符串 Hello!
return "Hello!";
}
}
4、RequestMapping
提供路由信息,负责URL到Controller中的具体函数的映射。
(注意:没有指定method属性值 ,那么请求处理方法可以支持HTTP的 GET , POST 请求方式)
5、@GetMapping
组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP GET
映射到特定的处理方法上。
(注:Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping},来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。)
@RestController
public class HelloWorld {
//相当于@RequestMapping(method = RequestMethod.GET)
@GetMapping("/hello")
public String hello() {
//返回HTTP Response body,直接请求直接是显示字符串 Hello!
return "Hello!";
}
}
6、@PostMapping
组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP POST
映射到特定的处理方法上。
(注:Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping},来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。)
@RestController
public class HelloWorld {
//相当于@RequestMapping(method = RequestMethod.POST)
@PostMapping("/hello")
public String hello() {
//返回HTTP Response body,直接请求直接是显示字符串 Hello!
return "Hello!";
}
}
7、@ControllerAdvice
统一处理异常注解。
8、@ExceptionHandler
用在方法上表示遇到这个异常就执行以下方法。
9、@Resource和@Autowired
(1) @Resource和@Autowired都是做bean的注入时使用
(2) 两者都可以写在字段和setter方法上。
//@Resource的解释
//1、J2EE提供,需要导入包javax.annotation.Resource;Spring支持该注解的注入
//2、按照 byName 自动注入。(注:@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。)
//3、特别注意:使用name属性,则使用byName的自动注入策略;而使用type属性时则使用byType自动注入策略;不指定属性时,通过反射机制使用byName自动注入策略。
public class HelloWorld{
//byName的自动注入策略
@Resource(name="userDao")
private UserDao userDao; // 用于字段上
//byType自动注入策略
@Resource(type="bookDao")
private BookDao bookDao;
//通过反射机制使用byName自动注入策略
@Resource
private buyDao buyDao;
@Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 作用属性的setter方法上
this.userDao = userDao;
}
}
//@Autowired 的解释
//1、Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;
//2、按照 byType 注入。(注:默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false)
public class HelloWorld{
@Autowired
private UserDao userDao; // 作用字段上
//如@Autowired需按照名称(byName)来装配,可以结合@Qualifier注解一起使用
@Autowired
@Qualifier("bookDao")
private BookDao bookDao; // 作用字段上
@Autowired
public void setUserDao(UserDao userDao) { // 作用属性的方法上
this.userDao = userDao;
}
}
10、@SessionAttributes
@Controller
@RequestMapping(value="/test")
//将Model中属性名为 user 的属性放入 HttpSession 对象当中
@SessionAttributes("user")
public class UserController {
public String getLogin(@RequestParam("userId") String userId,
@RequestParam("password") String password,Model model){
User user = new User();
user.setUserId(userId);
user.setPassword(password);
//将user对象添加到Model当中
model.addAttribute("user",user);
return "welcome";
}
}
特别注意:@SessionAttributes 只能声明在类上,不能声明在方法上!!
11、@ModelAttribute
@Controller
@RequestMapping(value="/test")
public class UserController {
@ModelAttribute
public void getLogin(@RequestParam("userId") String userId,
@RequestParam("password") String password,Model model){
User user = new User();
user.setUserId(userId);
user.setPassword(password);
//将user对象添加到Model当中
model.addAttribute("user",user);
}
@RequestMapping(value="/login")
public String login(){
//返回到welcome页面之后,将能获取到user的对象信息
return "welcome";
}
}
特别注意:被 @ModelAttribute 注释的方法会在 Controller 每个方法执行前被执行,因此在一个 Controller 映射到多个 URL 时,要谨慎使用。
11、@Repository
用于注解dao层,在daoImpl类上面注解。
12、@PathVariable
将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。(注:省略默认绑定同名参数)
@Controller
@RequestMapping(value="/test")
public class UserController {
//比如请求地址为:http://localhost:8080/test/user/zhangsan/password/123456
@RequestMapping(value="/user/{userId}/password/{password}")
public String getLogin(@PathVariable("userId") String userId,
@PathVariable("password") String password){
//输出 "User Id : zhangsan ,PassWord : 123456"
System.out.println("User Id : " + userId +" ,PassWord : " + password);
return "hello";
}
}
13、@RequestParam
在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”)
@Controller
@RequestMapping(value="/test")
public class UserController {
//比如请求地址为:http://localhost:8080/test/view/user=zhangsan&password=123456
@RequestMapping(value="/view")
//默认就是 @RequestParam方式,一般不写,但是参数名称需要对应
public String getLogin(@RequestParam("userId") String userId,
@RequestParam("password") String password){
//输出 "User Id : zhangsan ,PassWord : 123456"
System.out.println("User Id : " + userId +" ,PassWord : " + password);
return "hello";
}
}
14、@CookieValue
@Controller
@RequestMapping(value="/test")
public class UserController {
@RequestMapping(value="/cookieTest")
//通过@CookieValue会把 JSESSIONID 传入 sessionId 参数上,defaultValue 表示Cookie中没有JSESSIONID时默认为空
public void cookieValueTest(@CookieValue(value="JSESSIONID",defaultValue="") String sessionId){
logger.info("通过@CookieValue 获得数据:" + sessionId);
}
}
后续持续更新。。。