2、SpringMVC:请求处理之@RequestMapping

293 阅读2分钟

「这是我参与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";
    }
}