Spring MVC的常用注解和用法(一)

目录

[一·前言:什么是Spring Web MVC](#一·前言:什么是Spring Web MVC)

二·MVC与三层架构

2.1MVC定义

[2.2Spring MVC 与Spring Boot的关系](#2.2Spring MVC 与Spring Boot的关系)

[2.3MVC 与三层框架](#2.3MVC 与三层框架)

三·常见的注解以及使用方法

3.1@Controller

3.2@RestController

3.3@RequestMapping

四·请求参数接收

4.1传递单个参数

4.2传递多个参数

4.3传递对象

4.4@RequestParam:后端参数重命名


一·前言:什么是Spring Web MVC

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。

MVC:是一种软件架构设计模式;Web框架:用于处理浏览器与Java程序之间的交互。

二·MVC与三层架构

2.1MVC定义

MVC(Model View Controller),把软件系统分为三个基本部分:

View(视图):与浏览器交互,展示数据。

Model(模型):处理业务逻辑和数据

Cotroller(控制器):接收请求,选择模型处理,并决定返回哪个视图

这是MVC的定义

2.2Spring MVC 与Spring Boot的关系

Spring Boot只是实现Spring MVC 的一种方式。Spring Boot 可以添加很多依赖,借助这些依赖实现不同功能,Spring MVC就包含其中,实现Web功能。

这是Spring 实现的MVC

2.3MVC 与三层框架

目前主流的开发方式是前后端分离,对于Java后端开发,通常把整体架构分为三层:

表现层:展示数据结果和接收用户指令。

业务逻辑层:处理业务逻辑。

数据层:存储和管理数据。

在Spring中对应为:

Controller:控制层,接收前端请求,并处理响应数据。

Service:业务逻辑层,处理具体业务逻辑

Dao:数据访问层,负责数据的增删改查。

Model:实体类

MVC中,视图和控制器合起来:对应三层架构中的表现层;模型:对应业务逻辑层,数据层以及实体类。为了解耦分层和代码复用。

三·常见的注解以及使用方法

3.1@Controller

@Controller 用于定义一个控制器,Spring框架启动时加载,并把对象交给Spring管理。

在默认情况下,@Controller返回的是视图

返回的是/hello.html,Spring MVC 会把它当作视图名称,去查找对应的静态页面

3.2@RestController

@RestController 是@Controller 和 @ResponseBody的组合注解

@RestController表示该类中所有方法返回的都是数据,而不是视图

3.3@RequestMapping

@RequestMapping是用来注册接口的路由映射,它既可以修饰类,也可以修饰方法。

访问地址:类路径+方法路径

在类上面修饰的是类路径,在方法上面的是方法路径,第一个参数value就是路径。

常用属性有value,method,params,headers,consumes,produces

四·请求参数接收

访问不同的路径就是发送不同的请求。发送请求时可能会带参数。

4.1传递单个参数

通过浏览器访问,网址输入http://127.0.0.1:8080/Hello/Name?name=MVC

输出:

Spring MVC 会根据方法参数名,找到对应请求参数并赋值。

如果参数名不一致:http://127.0.0.1:8080/Hello/Name?name1=MVC

注意:1.使用基本类型接收参数时,参数必须传(初boolean类型),否则会报500错误

2.类型不匹配时,会报400错误

对于参数可能为空的数据,建议使用包装类型。

4.2传递多个参数

多个参数可以使用多个形参接收。

访问:http://127.0.0.1:8080/Hello/Age?name=zhangsan&age=18

4.3传递对象

当参数太多,可以封装为对象,Spring MVC 会自动实现对象参数的赋值

访问:http://127.0.0.1:8080/Hello/Person1?id=1&name=zhangsan&age=18

Spring会根据参数名称自动绑定到对象的各个属性上,如果某个属性未传递,则赋值为null;基本类型则赋值为默认初值。

4.4@RequestParam:后端参数重命名

前端传递的key和后端接收的key可以不一致,可以用@RequestParam来重命名前后端的参数值。

访问: http://127.0.0.1:8080/Hello/name?a=zhangsan

注意:1.使用@RequestParam进行参数重命名时,请求参数只能和@RequestParam声明的名称一致,才能进行参数绑定和赋值。

2.使用@RequestParam进行参数重命名时,参数默认变成必传参数

当然可以修改@RequestParam的属性required为false,变成非必传

相关推荐
Wang's Blog3 分钟前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
MandalaO_O1 小时前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko2 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷2 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路2 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白3 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库
QCoding3 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能
用户094248568033 小时前
第25章:Java虚拟线程(Project Loom)实战与调度协作
java·jvm
砚底藏山河3 小时前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven
wuminyu3 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++