SpringMVC(1)-@RequestMapping的简单使用

本文核心内容来自于韩顺平老师的课程
@RequestMapping注解可以用来指定控制器或者处理器的某个方法的请求url

@Controller  
public class UserServlet {  
    @RequestMapping("/login")  
    public String login() {  
        return "login";  
    }  
}

1 @RequestMapping 修饰方法和类

  1. @RequestMapping 注解可以修饰方法,还可以修饰类
  2. 当同时修饰类和方法时,请求的 url 就是组合 /类请求值/方法请求值
@Controller  
@RequestMapping("/user")  
public class UserHandler {  
    @RequestMapping(value = "/buy")  
    public String buy() {  
        System.out.println("购买商品");  
        return "success";  
    }  
}
  • 以代码为例,我们在类上加了@RequestMapping("/user") ,在方法上加了@RequestMapping("/buy") ,那么buy()方法实际代表的路径是 http://localhost:8080/工程路径/user/buy

2 @RequestMapping 指定请求方式

@Controller  
@RequestMapping("/user")  
public class UserHandler {  
    @RequestMapping(value = "/buy",method = {RequestMethod.GET, RequestMethod.POST})  
    public String buy() {  
        System.out.println("购买商品");  
        return "success";  
    }  
}
  1. method 表示目标方法的请求方法,有四个选项 POST, GET, PUT, DELETE
  2. SpirngMVC 控制器默认支持 GET 和 POST,也就是说什么都不设置,也可以接受 GET 和 POST 请求

3 @RequestMapping 指定 params 和 headers 支持简单表达式

@RequestMapping(value = "/buy", params = "bookId")  
public String buy(String bookId) {  
    System.out.println("购买商品");  
    return "success";  
}
  • 以上代码中,params = "bookId" 表示请求该目标方法时,必须给一个bookId参数,具体值不做限定
  • buy(String bookId) 表示请求目标方法时,请求参数携带的bookId会赋值给buy所需要的形参bookId
    我们可以对params进行限制:
  1. params = "bookId = 100" 表示必须传入bookId,且值必须是100,否则报错
  2. params = "bookId != 100" 表示必须传入bookId,且值不能是100
  3. ``
  4. params = {"bookId=1", "bookName"} 表示必须传入bookId和bookName,且bookId必须是1

4 @RequestMapping 支持 Ant 风格资源地址

  1. ? 表示匹配文件名中的一个字符
  2. *表示匹配文件名中的任意字符
  3. ** 表示匹配多层路径
  • /user/*/createUser: 匹配 /user/aaa/createUser/user/bbb/createUser 等 URL
  • /user/**/createUser: 匹配 /user/createUser/user/aaa/bbb/createUser 等 URL
  • /user/createUser??: 匹配 /user/createUseraa/user/createUserbb 等 URL

5. @RequestMapping 配合 @PathVariable 映射 URL 绑定的占位符

如果不用@PathVariable,我们在前端页面带参数的请求地址时候可能表示为user/login?name=tom&age=20
后端接收请求的时候采用占位符后可以写成user/login/{name}/{age},也就是tom会传给name,20传给age。
那么如何进行匹配呢,就需要借用@PathVariable,使用方法如代码:

@Controller  
public class UserHandler {  
    @RequestMapping("/user/login/{name}/{age}")  
    public String register(@PathVariable("name") String name, @PathVariable("age") int age){  
        System.out.println("接收到参数--" + "username= " + name + "--" + "usrage= " + age);  
        return "success";  
    }  
}

6.注意事项和使用细节

  1. 映射的url不能重复,比如下面代码这么设置是不被允许的
@Controller  
public class UserHandler {  
    @RequestMapping(value = "/hi")  
    public String hi() {  
        System.out.println("hi");  
        return "success";  
    }  
    @RequestMapping(value = "/hi")  
    public String hi2() {  
        System.out.println("hi");  
        return "success";  
    }  
}
  1. 请求简写形式
    1. @RequestMapping(value = "/buy",method = RequestMethod.POST) 等价于 @PostMapping(value = "/buy")
    2. @GetMapping @PostMapping @PutMapping @DeleteMapping使用方法类似
  2. 参数简写
    1. 如下代码,请求地址hello3与方法hello3同名,并且请求地址中的参数与方法中的形参名相同,后端可以直接接收。比如对于请求地址:localhost:9998/user/hello3?email=tom@sohu.com,我们的方法hello3所需要的形参email可以直接接收到内容tom@sohu.com
@GetMapping(value = "/hello3")  
public String hello3(String email) {  
    System.out.println("hello3 " + email);  
    return "success";  
}
posted @ 2024-04-27 23:05  marigo  阅读(7)  评论(0编辑  收藏  举报