SpringMVC常用注解总结(附例子)

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);    
     }  
     
}  

后续持续更新。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值