Spring MVC 中 @RequestMapping 路径映射与请求处理全流程

路径映射:@RequestMapping

java 复制代码
@RequestMapping("/user")
@RestController
public class UserController {
    @RequestMapping("m1")
    public String m1(){
        return "m1";
    }
}

@RequestMapping是实现 URL 路径与控制器方法映射的核心注解。

以上述代码为例,通过这个路径映射我们可以找到UserController这个类,以及该类中的m1方法。

@RequestMapping可标注在类和方法上,两者的路径会自动拼接形成完整的请求路径 :

类上的@RequestMapping("/user")定义了基础路径

方法上的@RequestMapping("m1")定义了具体路径

最终完整访问路径为:类路径+方法路径

这个路径有方法路径和类路径,通常我们会在这两个地方都进行声明。这是为了提高可读性。

需要注意的是当资源路径=方法路径+类路径。

当我们同时声明这两个路径的时候,在进行访问时,就要同时写下这两个路径:

请求操作

java 复制代码
@RequestMapping("/user")
@RestController
public class UserController {
@RequestMapping("/m3")
    public String m3(){
        return "m3";
    }
}

上述代码我们结合PostMan进行操作之后就可以得到对应的响应。

java 复制代码
 @RequestMapping("/m3")
    public String m4(){
        return "m4";
    }

在这种情况下"/m3"这个路径不可重复,如上所示就是一个错误的示范。

有参数的请求

下面我们再来介绍一下有传入参数的请求:

java 复制代码
@RequestMapping("/r1")
    public String r1(String keyword){
        return "接收参数:"+keyword;
    }

    @RequestMapping("/r2")
    public String r2(String keyword,String username){
        return "接收参数:"+keyword+username;
    }

这里要注意的是,retrun后的参数名字要和传入的参数名字保持一致:

对于上面这些,我们通过Post和Get都是可以访问的,下面我们来介绍一下仅支持Get/Post的请求:

java 复制代码
//只支持get
    @GetMapping("/r3")
    public String r3(){
        return "r3";
    }
@RequestMapping(value = "m2" ,method = RequestMethod.GET)
    public String m2(){
        return "m2";
    }

    //只支持post
    @GetMapping("/r4")
    public String r4(){
        return "r4";
    }
 @RequestMapping(value = "m1" ,method = RequestMethod.POST)
    public String m1(){
        return "m1";
    }

如上所述的r3和r4这两个路径名可以重复,因为他们的访问方式不同。

java 复制代码
@RequestMapping("r8")
    public String r8(@RequestParam(value = "q",required = false) String keyword){
        return "接受参数:kewword="+keyword;
    }

上面这个请求表示从前端接受的参数为q,但是我们为了便于理解,把q赋值给keyword。

当采用这种方法之后,q就是必须传入的参数,如果我们加上了required = false这句代码,那么q就不是必须传入的参数了。

传递的参数为数组和集合

java 复制代码
@RequestMapping("r9")
    public String r9(String[] arr){
        return "接收参数:arr"+ Arrays.toString(arr);
    }
 @RequestMapping("r10")
    public String r10(@RequestParam List<Integer> list){
        return "接收参数:list"+list;

    }

传递对象

java 复制代码
@RequestMapping("r7")
    public String r7(UserInfo userInfo){
        return "接收参数:"+userInfo.toString();
    }

我们已经定义好了一个UserInfo类,并进行了初始化,同时也重写了toString方法。这个时候我们就可以用上面的这种方式来进行对象的传递。

相关推荐
今天的砖头有点烫手啊几秒前
Java 序列化到底怎么选?从 Serializable 到 Protobuf 的演进与选型
java·json
Wang's Blog2 分钟前
Java 项目实战: 交友项目 - 登录发送验证码的测试验证与经验复盘
java·开发语言·交友
夕除11 分钟前
redis--主从还是集群,内存
java·spring·mybatis
百数平台15 分钟前
低代码安全技术实践:表单 / 流程 / 报表三级权限体系设计解析
java·大数据·数据库
白露与泡影18 分钟前
Spring Boot 实现验证码:Hutool-captcha、AJ-Captcha、EasyCaptcha 到底怎么选?
java·spring boot·后端
马优晨27 分钟前
Java中的dto是什么
java·开发语言·java中的dto是什么·java的dto是什么·dto在java中是什么
小蒜学长32 分钟前
基于Springboot+Vue的高校教师教学业绩综合管理系统的设计与开发(代码+数据库+LW)
java·数据库·spring boot·后端·教学业绩管理·三级权限
Mikko734 分钟前
Spring Boot 3.5.16 自带的 Tomcat 10.1.55 中了哪些 CVE?其中一条是修上一个漏洞时带进来的
java·spring boot·后端·安全·tomcat
十年Java程序媛38 分钟前
Java 内部类全解|成员 / 静态 / 匿名内部类,理清和 Lambda 的区别
java·spring boot·面试
霸道流氓气质1 小时前
AI 简历制作平台:结构化输出解析、多模板渲染与 PDF 导出的 Vue3 + Spring AI 全栈实战
人工智能·spring·pdf