「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
1、请求映射处理
1.1、@RequestMapping
@RequestMapping用来匹配客户端发送的请求,可以在方法上使用,也可以在类上使用。
方法:表示用来匹配要处理的请求
类上:表示为当前类的所有方法的请求地址添加一个前置路径,访问的时候必须要添加此路径。
@Controller
@RequestMapping("/userController")
public class UserController {
@RequestMapping("/sayHellow")
public String sayHellow(){
System.out.println("又进来了");
return "/index.jsp";
}
}
此时访问连接http://IP:端口号/项目名/userController/sayHellow 即可访问到该方法。
@RequestMapping中还有很多参数可以用来精确匹配,比如method、params等参数。
/**
* @RequestMapping 用来处理URL映射 将请求映射到处理方法中
* 除了可以用在方法上面 还可以同时用在类上面:将请求URL模块化,避免请求方法映射中的映射重复
* 如果加在类上面,该类所有请求方法的映射都必须加上类的映射:@RequestMapping("/mapping") /mapping/xxxx
* value 设置请求URL映射
* method 设置请求方式 GET/POST
* HTTP Status 405 - Request method 'GET' not supported
* 可以设置多个请求方式:method = {RequestMethod.POST,RequestMethod.GET}
* 如果不写就可以匹配所有请求方式
* 从spring4.3开始提供了一套简写请求方式的注解
* @PostMapping("/mapping")
* @GetMapping
* @PutMapping
* @DeleteMapping
* params : 设置请求必须携带某些参数
* 1. 必须要有某些参数 params = {"username"}
* 2. 必须没有某些参数 params = {"!username"}
* 3. 参数必须要等于什么值 params = {"username=一右四分之一"}
* 4. 参数必须要不等于什么值 params = {"username!=一右四分之一"}
*/
@Controller
@RequestMapping("/UserController")
public class UserController {
//http://ip:端口号/项目名/UserController/sayHellow?username=一右四分之一
@RequestMapping(value = "/sayHellow",params = {"username=一右四分之一"})
public String sayHellow(){
System.out.println("又进来了");
return "/index.jsp";
}
}
此时访问连接http://IP:端口号/项目名/userController/sayHellow?username=一右四分之一 才能访问到该方法。
@RequestMapping还包含了很多复杂的匹配功能,提供了通配符的支持。我们公司的项目中没有用到。
1.2 @PathVariable
@PathVariable 用在参数上面的,专门用来获取URL目录级别的参数
@Component
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Controller
@RequestMapping("/path")
public class PathVariableController {
/***
* @PathVariable 用在参数上面的
* 专门用来获取URL目录级别的参数
* 比如 http://ip:端口号/项目名/path/user/123/一右二分之一
* 要获得123 @RequestMapping("/user/{id}") : @PathVariable("id") Integer id
* 如果是单个参数接收必须要使用@PathVariable来声明对应的参数占位符名字
* 如果是javaBean可以省略@PathVariable,要保证占位符的名字和javaBean的属性名字一样 如 path02(User user)
*/
@RequestMapping("/user/{id}/{username}")
public String path01(@PathVariable("id") Integer id,@PathVariable("username") String name){
System.out.println(id);
System.out.println(name);
return "/index.jsp";
}
@RequestMapping("/user01/{id}/{name}")
public String path02(User user){
System.out.println(user);
return "/index.jsp";
}
}