乐趣区

SpingMVC的常用注解

SpingMVC 的罕用注解

1.RequestMapping 注解

  • RequestMapping 注解的作用是建设申请 URL 和解决办法之间的对应关系
  • RequestMapping 注解能够作用在办法和类上

    1. 作用在类上:第一级的拜访目录
    2. 作用在办法上:第二级的拜访目录
    3. 细节:门路能够不编写 / 示意利用的根目录开始
    4. == 细节:${pageContext.request.contextPath} 也能够省略不写,然而门路上不能写 /==
  • RequestMapping 的属性

    1. path 指定申请门路的 url
    2. value value 属性和 path 属性是一样的
    3. mthod 指定该办法的申请形式
    4. params 指定限度申请参数的条件
    5. headers 发送的申请中必须蕴含的申请头

2.RequestParam 注解

  • 把申请中的指定名称的参数传递给控制器中的形参赋值
  • 属性

    1. value:申请参数中的名称
    2. required:示意申请参数中是否必须提供此参数,默认值是 true,必须提供
    public String sayHello(@RequestParam(value="username",required=false)String name)

3.RequestBody 注解

  • 用于获取申请体的内容(留神:get 办法不能够)
  • 属性:required:是否必须有申请体,默认值是 true
public String sayHello(@RequestBody(required=false) String body)

4.PathVariable 注解

  • 领有绑定 url 中的占位符的。例如:url 中有 /delete/{id},{id} 就是占位符
  • 属性:value:指定 url 中的占位符名称
public String sayHello(@PathVariable(value="id") String id)

Restful 格调的 URL

  1. 申请门路一样,能够依据不同的申请形式去执行后盾的不同办法
  2. restful 格调的 URL 长处

    • 构造清晰
    • 符合标准
    • 易于了解
    • 扩大不便

5.RequestHeader 注解

  • 获取指定申请头的值
  • 属性:value:申请头的名称
public String sayHello(@RequestHeader(value="Accept") String header)

6.CookieValue 注解

  • 用于获取指定 cookie 的名称的值
  • 属性:value:cookie 的名称
public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue)

7.ModelAttribute 注解

  • 作用

    1. 呈现在办法上:示意以后办法会在控制器办法执行火线执行。
    2. 呈现在参数上:获取指定的数据给参数赋值。
  • 利用场景:当提交表单数据不是残缺的实体数据时,保障没有提交的字段应用数据库原来的数据。

润饰的办法有返回值

/**
* 作用在办法,先执行
* @param name
* @return
*/
@ModelAttribute
public User showUser(String name) {System.out.println("showUser 执行了...");
    // 模仿从数据库中查问对象
    User user = new User();
    user.setName("哈哈");
    user.setPassword("123");
    user.setMoney(100d);
    return user;
}
/**
* 批改用户的办法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(User user) {System.out.println(user);
    return "success";
}

润饰的办法没有返回值

/**
* 作用在办法,先执行
* @param name
* @return
*/
@ModelAttribute
public void showUser(String name,Map<String, User> map) {System.out.println("showUser 执行了...");
    // 模仿从数据库中查问对象
    User user = new User();
    user.setName("哈哈");
    user.setPassword("123");
    user.setMoney(100d);
    map.put("abc", user);
}
/**
* 批改用户的办法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(@ModelAttribute(value="abc") User user) {System.out.println(user);
    return "success";
}

ModelAttribute 正文一个办法的参数

@ModelAttribute("user")
public User addAccount() {return new User("jz","123");
}

@RequestMapping(value = "/helloWorld")
public String helloWorld(@ModelAttribute("user") User user) {user.setUserName("jizhou");
     return "helloWorld";
}

== 在这个例子里,@ModelAttribute(“user”) User user 正文办法参数,参数 user 的值来源于 addAccount() 办法中的 model 属性。==

8.SessionAttribute 注解

  • 用于屡次执行控制器办法间的参数共享。
  • 属性:

    1. value:用于指定存入的属性名称
    2. type:用于指定存入的数据类型。
@Controller
@RequestMapping(path="/user")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class SessionAttributeController {

    /**
    * 把数据存入 SessionAttribute
    * @param model
    * @return
    * Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap
    * 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类
    */ 
    @RequestMapping("/testPut")
    public String testPut(Model model){model.addAttribute("username", "泰斯特"); 
        model.addAttribute("password","123456");         
        model.addAttribute("age", 31);
        // 跳转之前将数据保留到 username、password 和 age 中,因为注解 @SessionAttribute 中有这几个参数
        return "success";
    }
    
    /**
    * 从 session 中获取值
    *@return
    */
    @RequestMapping("/testGet")
    public String testGet(ModelMap model){System.out.println(model.get("username")+";"
            +model.get("password")+";"+model.get("age"));
        return "success";
    }

    /**
    * 从 session 中革除值
    * @return
    */
    @RequestMapping("/testClean")
    public String complete(SessionStatus sessionStatus){sessionStatus.setComplete();
        return "success";
    }
}
退出移动版