美文网首页
springmvc的常用注解

springmvc的常用注解

作者: Rumbles | 来源:发表于2017-12-29 11:08 被阅读10次

    1、@Controller

    @Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
    

    2、@RequestMapping

        @RequestMapping(value="/{day}", method=RequestMethod.GET)
        public String getDay(Date day){}
         
        @RequestMapping(value="/addUser", method=RequestMethod.GET)
        public String addFavUser(@Validated FavUser favUser,BindingResult result){}
    
    @RequestMapping 可以使用 @Validated与BindingResult联合验证输入的参数,在验证通过和失败的情况下,分别返回不同的视图。
    
    @RequestMapping 中还支持通配符“* ”。如下面的代码我就可以使用/myTest/whatever/wildcard.do 访问到Controller 的testWildcard 方法。如:
    @Controller
    @RequestMapping ( "/myTest" )
    public class MyController {
        @RequestMapping ( "*/wildcard" )
        public String testWildcard() {
           System. out .println( "wildcard------------" );
           return "wildcard" ;
        }  
    }
    使用 @RequestMapping 的一些高级用法
    @RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" })
        public String testParams() {
           System. out .println( "test Params..........." );
           return "testParams" ;
        }
    用@RequestMapping 的params 属性指定了三个参数,这些参数都是针对请求参数而言的,它们分别表示参数param1 的值必须等于value1 ,参数param2 必须存在,值无所谓,参数param3 必须不存在,只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法。所以当请求/testParams.do?param1=value1&param2=value2 的时候能够正确访问到该testParams 方法,当请求/testParams.do?param1=value1&param2=value2&param3=value3 的时候就不能够正常的访问到该方法,因为在@RequestMapping 的params 参数里面指定了参数param3 是不能存在的。
    

    3、@PathVariable

    将上面的参数绑定到下面
    @RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
    public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {}
    

    4、@Resource和@Autowired

    我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。
    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
    public class TestServiceImpl {
        // 下面两种@Autowired只要使用一种即可
        @Autowired
        private UserDao userDao; // 用于字段上
        
        @Autowired
        public void setUserDao(UserDao userDao) { // 用于属性的方法上
            this.userDao = userDao;
        }
    }
    public class TestServiceImpl {
        // 下面两种@Resource只要使用一种即可
        @Resource(name="userDao")
        private UserDao userDao; // 用于字段上
        
        @Resource(name="userDao")
        public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
            this.userDao = userDao;
        }
    }
    

    5、 @requestParam

        @PostMapping("/register")
        public Result register(@RequestParam("phone") String phone,
                               @RequestParam("password") String pass,
                               @RequestParam("name") String name){
            return personService.register(phone,pass,name);
        }
    

    6、 @RequestHeader、@CookieValue

    
    @RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。
    
    示例代码:
    
    这是一个Request 的header部分:
    
    Host                    localhost:8080  
    Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  
    Accept-Language         fr,en-gb;q=0.7,en;q=0.3  
    Accept-Encoding         gzip,deflate  
    Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  
    Keep-Alive              300  
    @RequestMapping("/displayHeaderInfo.do")  
    public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  
                                  @RequestHeader("Keep-Alive") long keepAlive)  {  
    }  
    上面的代码,把request header部分的 Accept-Encoding的值,绑定到参数encoding上了, Keep-Alive header的值绑定到参数keepAlive上。
    
    @CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。
    
    例如有如下Cookie值:
    
      JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
    
    @RequestMapping("/displayHeaderInfo.do")  
    public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
    } 
    即把JSESSIONID的值绑定到参数cookie上。
    

    7、

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。参考:@ControllerAdvice 文档
    @RestControllerAdvice 拦截所有的异常
    

    相关文章

      网友评论

          本文标题:springmvc的常用注解

          本文链接:https://www.haomeiwen.com/subject/ybqigxtx.html