SpringMvc知识点(1)

发布于:2024-05-24 ⋅ 阅读:(160) ⋅ 点赞:(0)

执行流程

springmvc执行流程

一、@RequestMapping注解

这个注解既可以类上,也可以写在方法上。例如:

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {
    /**
     * 老韩解读
     * 1. method=RequestMethod.POST: 表示请求buy目标方法必须是 post
     * 2. RequestMethod 四个常用选项 POST, GET, PUT, DELETE[后面我们会详解]
     * 3. SpringMVC 控制器默认支持GET和POST两种方式
     * 4. buy()方法请求的url: http://ip:port/工程路径/user/buy
     * 5. @PostMapping(value = "/buy")等价 @RequestMapping(value = "/buy",method = RequestMethod.POST)
     * @return
     */
    @RequestMapping(value = "/buy",method = RequestMethod.POST)
    public String buy() {
        System.out.println("购买商品~");
        return "success";
    }
}

注意点:
  (1)方法上的@RequestMapping中的method如果省略不写,则此方法则默认支持GET和POST请求;
  (2)@RequestMapping中如果只有一个路径值,则value可以省略不写;
  (3)@RequestMapping可以通过params属性来规定请求中必须携带的参数,例如:

/**
     * 老韩解读
     * 1. params="bookId" 表示请求该目标方法时,必须给一个bookId参数, 值没有限定
     * 2. search(String bookId): 表示请求目标方法时, 携带的bookId=100, 就会将请求携带的 bookId对应的值 100, 赋给 String bookId
     * 3. 如果写成params = "bookId=100" 表示必须给一个bookId参数, 而且值必须是100
     *
     * @return
     */
    @RequestMapping(value = "/find", params = "bookId", method = RequestMethod.GET)
    public String search(String bookId) {
        System.out.println("查询书籍 bookId= " + bookId);
        return "success";
    }

  (4)@RequestMapping支持通配符资源路径,
  ? 表示匹配文件名中的一个字符
  *表示匹配文件名中的任意字符
  **表示匹配多层路径
例如:

/**
     * 
     * 1. @RequestMapping(value = "/message/**") /** 可以匹配多层路径,例如路径/message/aa,/message/aa/bb,都可以匹配到该方法。
     */
    @RequestMapping(value = "/message/**")
    public String im() {
        System.out.println("发送消息");
        return "success";
    }

二、REST风格

  亚马逊官方对于REST风格的描述
  REST风格是前后端达成的一种共识,充分利用了HTTP的优势。Springmvc中使用相关注解可以实现REST风格的接口。
(1)获取数据

//查询[GET]
    @RequestMapping(value = "/book/{id}", method = RequestMethod.GET)
    public String getBook(@PathVariable("id") String id) {
        System.out.println("查询书籍 id=" + id);
        return "success";
    }

(2)增加数据

//添加[POST]
    @PostMapping(value = "/book")
    public String addBook(String bookName) {
        System.out.println("添加书籍 bookName== " + bookName);
        return "success";
    }

(3)修改数据

//修改[PUT]
    @PutMapping(value = "/book/{id}")
    public String updateBook(@PathVariable("id") String id) {
        System.out.println("修改书籍 id=" + id);
        return "redirect:/user/success";
    }

(4)删除数据

//删除[DELETE]
    @RequestMapping(value = "/book/{id}", method = RequestMethod.DELETE)
    public String delBook(@PathVariable("id") String id) {
        System.out.println("删除书籍 id= " + id);
        return "redirect:/user/success";
    }

注意点:为什么要使用@PathVariable注解?
答:映射URL绑定的占位符,在前端发送请求的时候,就可以不用携带参数的名字,只需要携带参数的值就行,这样更加简洁。同时注意@PathVariable中的值要和@RequestMapping中绑定的参数占位符的值相对应。