【JavaEE06-后端部分】SpringMVC01-Spring MVC第一大核心URL 路由映射【建立连接】与 Postman 接口测试详解

Spring MVC的认识

  • Spring web mvc被大家普遍的认为是spring mvc。
  • 我们的spring mvc是基于servlet的。
  • Spring mvc最开始就包含在了spring framework中。

MVC和SpringMVC的变动

MVC是Model View Controller的缩写

MVC

我们传统的mvc呢就是我们需要自己去写视图,就是说我们视图把根据请求发送给我们的控制器,然后控制器呢去调度处理,选择我们的模型进行一个数据的处理,处理完毕之后呢把结果返回给我们的控制器,然后我们控制器最终呢将响应返回给我们的视图。


SpringMVC

而我们的spring mvc呢,它核心呢就是关注于spring web,也就是说呀,能把我们传统的mvc变得更加的灵活。比如我们会有一种情况,如图所示,我们浏览器呢直接可以去请求控制器,然后控制器去调用我们的模型,然后模型把数据给返回给我们的控制器,最终控制器直接就可以把数据呢响应给我们的浏览器。

另外一种情况是为了兼容我们传统的mvc,也就是我们的浏览器去请求控制器,然后我们的控制器呢它去调用模型处理数据,然后返回处理后的数据给我们的控制器,控制器呢再将我们的结果响应给视图,视图把它渲染成完整页面之后再返回给浏览器。


总结

Spring Web MVC完全继承了传统MVC的分层思想和核心职责 ,核心变动是适配了现代前后端分离的开发趋势 ,通过优化请求入口、让视图层可在服务端/前端灵活归属,让控制层拥有多结果出口,既保留了对传统服务端渲染的兼容,又成为当下前后端分离开发的主流架构,是传统MVC在Web开发领域的现代化演进版本


SpringBoot和Spring Framework和springMVC关系

Spring boot、 spring framework、 spring mvc 他们三个之间的关系。

我们的spring boot类似于12306,spring framework类似于火车,Spring mvc类似于代售点,三者不存在替代关系,而是互补和依赖;

✅ 核心对应

  • Spring Framework(火车)整个体系的核心载体和基础,没有火车就不存在购票、乘车的一切逻辑,就像没有 Spring Framework 的 IOC/AOP 核心能力,Spring MVC 和 Spring Boot 都无从谈起;火车是实现「运输」核心需求的底层支撑,正如 Spring Framework 是实现 Java 开发「解耦、分层」核心需求的底层支撑。
  • Spring MVC(代售点)基于核心载体的「专属功能模块」 ,代售点是火车运输体系下,专门解决「线下购票」需求的功能节点,不能脱离火车体系单独存在;正如 Spring MVC 是 Spring Framework 体系下,专门解决「Web 开发 / 请求响应」需求的子模块,天然依赖 Spring 的核心能力,且是体系内的标准化功能入口
  • Spring Boot(12306)基于核心载体 + 功能模块的「高效便捷工具」 ,12306 没有替代火车 / 代售点,而是把「购票、查车次、选座」等代售点的功能,做成了更高效、更便捷的线上工具,省去了线下排队、填单的繁琐;正如 Spring Boot 没有替代 Spring Framework/Spring MVC,而是把 Spring 的核心配置、Spring MVC 的 Web 组件配置等繁琐工作,做成了自动化、极简式的工具,省去了手动配依赖、写 xml 的麻烦,本质还是调用火车(Framework)和代售点(MVC)的核心能力。

✅ 互补依赖

  1. 无替代,只互补:12306 再方便,也需要火车来完成运输、代售点作为线下补充;Spring Boot 再便捷,也需要 Spring Framework 做核心支撑、Spring MVC 做 Web 核心处理,三者各司其职,覆盖「基础 - 功能 - 便捷」全场景。
  2. 层层依赖,缺一不可:12306 的购票数据最终对接火车调度系统,代售点也隶属于火车体系;Spring Boot 的自动配置最终还是生成 Spring Framework 的容器 Bean、加载 Spring MVC 的 Web 组件,底层逻辑完全由前两者决定。
  3. 主流选择但不淘汰传统:现在大家优先用 12306(Spring Boot),但代售点(Spring MVC)依然存在(传统 Spring MVC 开发),火车(Spring Framework)更是根基;正如企业主流用 Spring Boot,但 Spring MVC 的 Controller/RequestMapping 核心用法不变,Spring Framework 的 IOC/AOP 更是深入所有代码。

学习Spring MVC

我们学习spring mvc实际上是对spring web的学习,那么学习spring web就这三个:1.建立连接,2.请求,3.响应,掌握这3点即掌握Spring MVC的核心,用银行存款案例可直观理解:

  1. 建立连接:将用户(浏览器)与Java程序(Spring程序)关联,即通过访问一个URL,能调用到Spring程序中的对应方法(类比:去银行柜台,建立与银行工作人员的连接)。
  2. 请求处理:用户发送请求时会携带参数,程序需获取这些参数(类比:去银行存款时,携带银行卡、身份证等参数)。
  3. 响应处理:执行完业务逻辑后,将程序运行结果返回给用户(类比:银行办理完存款后,返回存折给用户)。

那么接下来我们就对这三个点进行一一的学习,首先呢本期我们来看第一个点建立连接。


1 建立连接:URL路由映射

Spring MVC中通过**@RequestMapping注解**实现URL与程序方法的映射,即浏览器访问指定URL时,会触发对应方法的执行。

说白了建立连接就是通过@RequestMapping注解实现的。

RequestMapping译为请求映射。

1.1.1 基础代码示例

  • @RequestMapping可以加在方法上,也可以加载类上。
  • 加在类上我们称之为类路径,加在方法上面,我们称之为方法路径,然后的话,我们最终是要访问对应的方法的,所以呢此时我们的资源路径就是类路径+方法路径【具体的路径就是:协议+IP+端口+上下文路径/+类路径+方法路径】。
java 复制代码
package com.zhongge.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName UserController
 * @Description TODO 用户控制器
 * @Author 笨忠
 * @Date 2026-02-05 16:18
 * @Version 1.0
 */
@RestController
@RequestMapping("/user") //加在类上面
public class UserController {

    @RequestMapping("/m1")//加载方法上面
    public String m1(){
        return "m1";
    }
}

路径:http://127.0.0.1:8080/`user`/`m1`

结果:

注意:方法名与URL路径名称无需一致,访问上述路径即可看到返回结果。

1.1.2 @RequestMapping注解详解

1.核心作用:注册接口的路由映射,即用户访问指定URL时,对应到程序中某个类的某个方法(这个过程称为"路由映射")。

2.修饰范围:RequestMapping它是一个类路径,也是一个方法路径。就是说它既是一个类柱解,也是一个方法注解。如果我们加在类上,那么我们的访问路径就是累路径+方法路径。如果我们没有加在类上,那么我们的路径就只有方法路径,但是我们建议给类也加上一个路径的映射,目的是:

  • 为了防止路径重复,好比是包机制
  • 为了提高可读性

3.与@RestController的关系:@RestController是Spring MVC的核心控制器注解,Spring会扫描加了该注解的类,再查看类中是否有@RequestMapping注解。若去掉@RestController,访问URL会报404错误(Spring无法识别该类为控制器)。

其实啊他我们在后面学过spring的Ioc我们知道,我们这个类的实例化不需要我们自己去做,我们把它交给我们的spring容器,然后呢由他去给我们创建这类的一个实例,我们的spring是不知道的帮你创建哪些类的实例的,所以呢你得打上这个controller标签用来告诉他,然而呢如果你的结果返回的是JSON对象的话,你就得写RestController。

4.URL路径注意事项:路径最前面加不加"/"均可,Spring启动时会自动拼接;支持多层路径(如"/user/m1/say/hi"),举个例子:

java 复制代码
@RestController
@RequestMapping("user") //加在类上面【不用写/】
public class UserController {

    @RequestMapping("m1")//加载方法上面【不用写/】
    public String m1(){
        return "m1";
    }
}

结果:

但是为了规范,我们建议将斜杆/加上。


注意事项1:资源路径不可以重复

java 复制代码
@RestController
@RequestMapping("/user") //加在类上面
public class UserController {

    @RequestMapping("/m1")//加载方法上面
    public String m1(){
        return "m1";
    }

    @RequestMapping("m1")//加载方法上面
    public String m2(){
        return "m1";
    }
}

直接就报错了

是这样的@RequestMapping它的作用是将我们的资源路径与对应的方法进行映射。那么的话,它底层是一个类似于map集合的形式,将键值对给存起来。我们的资源路径就是key,我们的方法就是value。那么此时啊我们的key是不可以重复的,也就是说我们的资源路径是不可以重复的。

1.1.3 请求方式支持

@RequestMapping默认支持所有请求方式(GET、POST等):

  • GET请求:浏览器发送的请求默认是GET,可直接通过URL访问触发。
  • POST请求:可通过form表单、Postman等工具构造POST请求【Postman工具的使用我们在后面有提到】,同样能触发方法执行。
  • 指定请求方式:通过@RequestMapping的method属性指定(如method=RequestMethod.POST),此时该方法仅支持指定的请求方式。

我们的@RequestMapping默认支持所有请求方式,那么此时我们如果想要让他只支持Get请求的话,怎么做呢?方法=请求方法枚举.请求方式

java 复制代码
@RestController
@RequestMapping("/user") //加在类上面
public class UserController {

    //既可以支持GET又可以支持POST
    /*@RequestMapping("/m1")//加载方法上面
    public String m1(){
        return "m1";
    }*/

    //只是支持GET
    /*
    * 注意:如果有多个参数的话,那么此时就要将value属性给写上
    * 如果只有一个参数的话,那么此时我们的value属性是可以省略的
    * */
    @RequestMapping(value = "/m2", method = RequestMethod.GET)//加载方法上面
    public String m2(){
        return "m2";
    }
}

此时我们的GET请求是可以成功的


但是我们的POST请求会报错:会报一个405的错误,我们前面说过,4开头的是客户端出问题了,404是不允许访问,而405则是方法不被允许。


同理我只支持POST请求

java 复制代码
 	@RequestMapping(value = "/m3", method = RequestMethod.POST)
    public String m3(){
        return "m3";
    }

那么接下来咱么就讲一下注解:

1)对于任何注解如果我只是一个属性的话,那么我的值默认就是给value属性的
"m1"等价于 vlaue="/m1"

java 复制代码
@RequestMapping("/m1")

2)对于任何注解如果我有多个属性的话,那么此时就得显示的将value写出来

java 复制代码
@RequestMapping(value = "/m2", method = RequestMethod.GET)

那么我就有一个疑问了:你如果只是支持一个GET请求就要写那么长:@RequestMapping(value = "/m2", method = RequestMethod.GET)

那么其实我们使用一个比较简单的代替方案的:@GetMapping("/m2")

就是说:@RequestMapping(value = "/m2", method = RequestMethod.GET)等价于@GetMapping("/m2")

java 复制代码
 	@GetMapping("/m2")
    public String m2(){
        return "m2";
    }

同理:@RequestMapping(value = "/m3", method = RequestMethod.POST)等价于@PostMapping("/m3")


@RequestMapping注解中的属性

java 复制代码
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective({ControllerMappingReflectiveProcessor.class})
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}
属性名 类型 默认值 核心用法
name String 空字符串 给当前请求映射设置唯一标识,用于文档生成 / 监控排查,无实际路由作用,仅做语义化标记
value String[] 空数组 【路径映射核心】指定请求的 URL 路径,支持数组(多路径映射同一方法)占位符 {xxx}通配符(单层)/ *(多层);与path互为别名
path String[] 空数组 value完全等价,推荐显式使用 path提升代码可读性(Spring 官方最佳实践),避免 value 的多语义混淆
method RequestMethod[] 空数组 指定匹配的HTTP 请求方式 ,枚举值包含GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS/TRACE;空数组表示匹配所有请求方式
params String[] 空数组 匹配请求的URL 参数 ,支持复杂表达式(如!id表示无 id 参数、id=123表示 id 等于 123、id!=123表示 id 不等于 123)
headers String[] 空数组 匹配请求的请求头 ,语法同 params(如Content-Type=application/json!token),支持通配符(如Accept=*/*
consumes String[] 空数组 指定方法接收的请求体媒体类型(Content-Type) ,如application/jsonapplication/x-www-form-urlencoded;匹配失败返回 415 Unsupported Media Type
produces String[] 空数组 指定方法返回的响应体媒体类型(Content-Type) ,结合请求头Accept匹配,如application/json;charset=UTF-8;匹配失败返回 406 Not Acceptable

补充: 工具介绍:Postman(接口测试工具)

后端开发无需编写前端代码测试接口,可使用Postman工具模拟各种请求,高效测试后端接口。

1) 下载与安装

下载链接:postman,安装后无需升级(提示升级时点击Dismiss即可)。

2) Postman的使用

首先你登录之后的界面如下:


然后点击+号创建文件夹,然后自己为文件夹起一个名字


此时点击add a request添加一个请求


然后可以自己起一个名字


选择请求的方式



点击保存,那么到时候我们的数据就会保存下来


3) Postman核心传参方式(Postman常用)

  1. 普通传参(查询字符串) :通过URL拼接参数(如?name=spring&age=18),对应HTTP请求的查询字符串部分。
    Params->Query Params
  2. headers部分
    用来传递请求的元数据,告诉服务器 "我是谁"、"我要什么格式的数据" 等信息
    常见场景:
    1)身份验证:Authorization: Bearer <token>
    2)指定数据格式:Content-Type: application/json
    3)模拟浏览器请求:User-Agent: Mozilla/5.0...
  3. Body中的 form-data:用于提交文件、图片等【二进制的信息】,对应Content-Type: multipart/form-data。
  4. x-www-form-urlencoded:普通表单提交格式,对应Content-Type: application/x-www-form-urlencoded。
  5. Body中 raw:可上传任意格式文本(如JSON、XML、HTML等),常用于传递JSON数据。

那么到现在的话,我们掌握了Postman工具的使用,以及我们已经学习了Spring Web的第一个知识就是建立连接。

我们说Spring Web主要就是学3个:建立连接、请求、响应,那么下一期我们会学习第二个知识:请求。最后感谢各位老铁,如果觉得可以,希望老铁给个点赞+关注,我们下期再见~~👋

相关推荐
rannn_1112 小时前
【苍穹外卖|Day3】公共字段自动填充、新增菜品功能、菜品分页查询功能、删除菜品功能、修改菜品功能、起售停售菜品
java·spring boot·后端·学习·项目
无名-CODING2 小时前
SpringMVC处理流程完全指南:从请求到响应的完整旅程
java·后端·spring
瑶山2 小时前
Spring Cloud微服务搭建三、分布式任务调度XXL-JOB
java·spring cloud·微服务·xxljob
Re.不晚2 小时前
深入底层理解HashMap——妙哉妙哉的结构!!
java·哈希算法
Serene_Dream2 小时前
Java 内存区域
java·jvm
柒.梧.2 小时前
从零搭建SpringBoot+Vue+Netty+WebSocket+WebRTC视频聊天系统
vue.js·spring boot·websocket
爱吃山竹的大肚肚2 小时前
文件上传大小超过服务器限制
java·数据库·spring boot·mysql·spring
黄昏恋慕黎明2 小时前
测试模型讲解
java
瑞雪兆丰年兮2 小时前
[从0开始学Java|第十二天]学生管理系统升级
java·开发语言