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

你可能感兴趣的:(java,spring,后端)