SpringMVC:常用注解

在上一篇基础中使用了@Controller,@RequestMapping这样的注解,它与注释类似,但它可以实现程序的一部分功能并且也是配置的重要组成部分,也就是说SpringMvc配置的部分以及程序上的部分功能可以通过注解来完成。下面看看常用的注解都有哪些。

@Controller

上一篇中我们有使用过,负责注册一个bean 到spring 上下文中。如:

@Controller
public class HelloWorld {}

@RequestMapping

是用来映射请求的,或者说控制器指定可以处理哪些 URL 请求。可以在控制器上标注,也可以在方法上标注。如:

@RequestMapping("/helloworld")
public String hello(){}

注:RequestMapping可以实现模糊匹配路径,比如:
?:匹配一个字符
*:匹配任意字符
**:匹配多层路径
/**/lastDir就可以匹配/firstDir/secondDir/lastDir这样的路径

@PathVariable

用来映射请求URL中绑定的占位符,我们可以通过这种方式,获得url中的参数name。如:

@RequestMapping("/hello/{name}")
public String helloName(@PathVariable(value="name") String name){
    System.out.println("hello " + name);
    return "success";
}

那么当我们访问http://localhost:8080/SpringMvcTest/hello/sun 时,就会执行到这个方法。name的值会变成sun。

@RequestParam 

同样也是用来获取参数的,可以把请求参数传递给请求方法。如:

@RequestMapping(value="/helloparam")
public String helloParam(@RequestParam(value="firstname") String firstname, @RequestParam(value="lastname", required=false, defaultValue="") String lastname){
        System.out.println("hello " +  lastname + " " + firstname);
        return "success";
}

@RequestParam与@PathVariable不同的地方是前者取url路径中的参数,后者取url?后面键值对的参数。

@ExceptionHandler

注解到方法上,在控制器中出现异常时会执行该方法。

@Controller
public class HelloWorld {
    @RequestMapping("/helloexception")
    public String helloException()throws Exception{
        System.out.println("hello Exception!");
        throw new Exception();
    }

    @ExceptionHandler
    public ModelAndView exceptionHandler(Exception ex){
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception", ex);
        System.out.println("in testExceptionHandler");
        return mv;
    }

    @RequestMapping("/error")
    public String error(){
        return "error";
    }
}

当访问helloException时,发生异常,接着会执行exceptionHandler方法,最后返回error视图。

@ControllerAdvice

使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

@ControllerAdvice
public class GlobalControllerAdvice {
    @ExceptionHandler
    public ModelAndView exceptionHandler(Exception ex){
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception", ex);
        System.out.println("exception occurred in the GlobalControllerAdvice.");
        return mv;
    }
}

@Controller
public class HelloWorld {
    @RequestMapping("/helloexception")
    public String helloException()throws Exception{
        System.out.println("hello Exception!");
        throw new Exception();
    }
}

当访问helloexception时发生异常,会跳入全局GlobalControllerAdvice的exceptionHandler方法。

@RequestBody

用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

@ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

@ModelAttribute

在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,将请求参数绑定到对象中,再传入参数将方法参数对象添加到模型中。

后面三个会在后面学习整合SpringIOC和SpringMVC时详细学习。现在对于如何获取参数等的注解有了大致的了解,后面会继续详细学习SpringMvc。

发表评论

电子邮件地址不会被公开。 必填项已用*标注