【ssh系列二】——SpringMVC中的注解及运用

来源:互联网 发布:java 反射机制和c# 编辑:程序博客网 时间:2024/06/03 15:46

一、@RequestMapping 

    解释:RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。(当项目比较大,服务模块比较多,为了方便区分控制器中的方法,可以通过类上加入该注解来进行区分)
    属性:
      value:指定请求的实际url(支持ant风格、可以含正则表达式、支持或关系)。
      method:指定请求的method类型:GET、POST、PUT、DELETE。
      params:指定request中必须包含某些参数值是,才让该方法处理。
      headers:指定request中必须包含某些指定的header值,才能让该方法处理请求(headers的查看可通过浏览器--按F12--NetWork进行查看Headers的信息,如下图)。
      consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html(如下图方式查看)。
      produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回(如下图方式查看)。 

    实例:

-    /**     * @RequestMapping 实例!     * 请求地址:http://localhost:8080/(随意一个字符)test1?username=aaa&age=12     * 或者请求地址:http://localhost:8080/test(随意多个字符)?username=aaa&age=12     */    @RequestMapping(value={"?test1","test*"} ,            method={RequestMethod.GET,RequestMethod.POST},            params={"username:\\d+","age!=1"},            headers={"Content-Language!=en"},            consumes ={"application/json","text/html"},            produces ={"application/json"})    public String testRequestMapping(){        System.out.println("testRequestMapping");        return SUSSECC;    }-

二、@RequestParam

    解释:绑定单个页面请求来的参数值,用于将请求参数区数据映射到功能处理方法的参数上。
    属性:
      value:入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入。
      required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将抛出异常。
      defaultValue:默认值,表示如果请求中没有同名参数时的默认值,设置该参数时,自动将required设为false。

    实例:

- /**     * @RequestParam 实例!     * 请求地址:http://localhost:8080/test1?username=aaa     */    @RequestMapping(value={"test1"})    public String testRequestParam(            @RequestParam(value="username",                        required = false,                        defaultValue = "无") String username){        System.out.println("testRequestParam"+username);        return SUSSECC;    }-

三、@PathVariable

    解释:绑定URL模板变量值,用于将请求URL中的模板变量映射到功能处理方法的参数上。
    属性:
      value:入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入。
      required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将抛出异常。

    实例:

-    /**     * @PathVariable 实例!     * 请求地址:http://localhost:8080/test1/aaa     */    @RequestMapping(value={"test1/{username}"})    public String testPathVariable(            @PathVariable(value="username",                    required = false) String username) {        System.out.println("testPathVariable"+username);        return SUSSECC;    }-

四、@ModelAttribute

    解释:ModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解在方法参数上时会将注解的参数对象添加到Model中;当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法,但其它Action被调用时会首先调用该方法。
    属性:
      value:绑定模型中的key。
      binding:控制数据绑定,默认是true。

    实例:

-    /**     * @ModelAttribute 实例!     * 页面取值:${requestScope.Name};显示:mark     */    @ModelAttribute    public void testModelAttribute(Model model) {        model.addAttribute("Name","mark");    }    /**     *页面取值:${requestScope.aaa};显示:mark     */    @ModelAttribute(value="aaa",binding = false)    public String testModelAttribute2() {        return "mark";    }    /**     *页面取值:${requestScope.user.name};显示:mark     */    @ModelAttribute    public User testModelAttribute1() {        User user = new User();        user.setName("mark");        return user;    }    /**     * 和上面返回User方法对应,如果直接返回实体类User则下面方面中的值应该是该实体的首字母小写     *页面取值:${requestScope.user.name};显示:mark111     */    @RequestMapping(value={"test1"})    public String testModelAttribute3(@ModelAttribute("user") User user) {        user.setName("mark111");        return SUSSECC;    }-

五、@SessionAttributes

    解释:在默认情况下,Model中的属性作用域是 request 级别是,也就是说,当本次请求结束后,Model中的属性将销毁。如果希望在多个请求中共享 Model中的属性,必须将其属性转存到 session 中,这样 Model的属性才可以被跨请求访问。
    属性:
      1、value:这是一个字符串数组,里面应写需要存储到session中数据的名称。
      2、types:根据指定参数的类型,将模型中对应类型的参数存储到session中。

    实例:

-    /**     * 页面取值:${requestScope.user1.name};显示:mark111     */    @SessionAttributes(value="user",types ={User.class})    public class Test    {        @RequestMapping(value = {"test1"})        public String testSessionAttributes(Model model) {            User user = new User();            user.setName("mark111");            model.addAttribute("user1", user);            return SUSSECC;        }    }-

六:@Responsebody与@RequestBody

    解释:(可以分开使用)
      Responsebody:表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用。
      RequestBody:将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

    实例:

-    /**     *  将请求中的 datas 写入 User 对象中     */    @RequestMapping(value = "test1")    @ResponseBody    public User login(@RequestBody User user) {        // 不会被解析为跳转路径,而是直接写入 HTTP 响应正文中        return user;    }-

七:@Controller

    解释:控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

八:总结

    将这些注解学习完之后并且通过例子进行了实践,也有类似的注解之间的对比过程,相信以后用的时候就会很方便了。