【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个:建立连接、请求、响应,那么下一期我们会学习第二个知识:请求。最后感谢各位老铁,如果觉得可以,希望老铁给个点赞+关注,我们下期再见~~👋

相关推荐
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚10 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白12 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司12 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地13 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415913 小时前
TCP超时重传机制是为了解决什么问题?
java
goodesocket15 小时前
手机LPDDR芯片测试座厂商适配性强
测试工具
莫逸风16 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠16 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z1234567898617 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程