SpringMVC

一、SpringMVC入门

1.1 介绍

SpringMVC将Servlet一些通用功能进行了抽取和封装,使用它之后,代码主要有两部分组成:

  • 前端控制器:由SpringMVC提供,主要负责接收参数和返回数据

  • 处理器:由程序员编写,主要负责参数的处理和业务层(service层)调用

1.2 ⭐入门案例⭐

需求:发送一个请求name=张三&age=18,后台接收参数,封装一个User对象返回json数据

步骤分析:

  1. 创建web工程,添加依赖

  2. 添加web环境的初始类和核心配置类

  3. 创建实体类

  4. 创建处理器

  5. 部署项目到Tomcat

1.2.1 创建web工程

创建模块,换换为web工程,添加依赖

复制代码
<dependencies>
      <!--servlet-->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
      </dependency>
      <!--springmvc核心-->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.16</version>
      </dependency>
      <!--jackson-->
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.1</version>
      </dependency>
      <!--lombok-->
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.26</version>
      </dependency>
    </dependencies>

1.2.2 加载配置类

在项目中添加web环境的初始类和核心配置

1.2.3 创建实体类

准备一个实体类,用于封装返回结果

1.2.4 创建处理器

1.2.5 部署项目

将项目部署到tomcat,浏览器访问http://localhost:8080/user/demo1?name=张三&age=18,观察效果

1.3 执行流程

1.4 注解

1.4.1 @RequestMapping

@RequestMapping注解用于建立请求URL和处理方法之间的对应关系, 常见属性如下:

  • value: 等同于path,用于为当前方法绑定访问路径

  • method:用于限制请求类型,如果省略此选项,代表不对请求类型做限制

注意:此注解可以标注在方法上,也可以标注在类上,标注在类上代表类中的所有方法都可以共用一段URL

复制代码
    value:设置请求路径
    用于给当前方法指定访向路径,支持数组的写法,代表可以给一个方法绑定多个路径

浏览器访问http://localhost:8080/user/demo2?name=张三&age=18,观察效果:

浏览器访问http://localhost:8080/user/demo3?name=张三&age=18,观察效果,value中未绑定"/demo3",所以未找到路径。

复制代码
    method:设置请求方式
    限制当前方法可以接收的请求类型,支持教组的与法,代表可以同时接收多种录求方式:如果method属性省略,代表可以接收所有类型请求

令method = RequestMethod.POST,重新部署,浏览器访问http://localhost:8080/user/demo2?name=张三&age=18,观察效果:(浏览器地址栏只支持get方法,所以使用post方法会报错405-方法不允许)

1.4.2 @ResponseBody

@ResponseBody注解用于将方法返回值直接响应给浏览器,如果返回值类型是对象或集合,将会转换为JSON格式响应

位置:Controller方法上/类上(如果标在类上,代表类中所有方法上都生效)

简化:@RestController = @Controller + @ResponseBody

二、postman

Postman是一款功能强大的接口调试工具

三、接收请求参数

在SpringMVC中,可以使用多种数据类型来接收前端传入的参数

3.1 简单参数

需要保证前端传递的参数名称跟方法的形参名称一致

请求:

代码:

3.2 对象参数(参数较多时使用更方便)

  • 需要保证前端传递的参数名称跟实体类的属性名称一致

  • 类需要实现序列化接口

请求:

代码:

3.3 数组参数(一个名字对应多个值)

需要保证前端传递的参数名称跟方法中的数组形参名称一致

请求:

代码:

3.4 集合参数(一个名字对应多个值)

请求参数名与形参集合名称相同且请求参数为多个,使用@RequestParam(参数名字)绑定参数关系

请求:

代码:

3.5 日期参数

接收参数为日期类型,需要使用@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")定义参数格式

请求:

代码:

3.6 Json参数

SpringMVC也可以接收请求体中的json字符串为参数,并且自动封装为指定对象

  • 在post请求方式下,使用请求体传递Json格式数据

  • 使用注解@RequestBody对象类型

请求:

代码:

3.7 路径参数

springmvc还支持通过请求路径直接传递参数,后台使用{...}来标识该路径参数,需要使用@PathVariable(name = {占位参数})获取

请求:

代码:

3.8 @RequestParam

@RequestParam标注在方法参数之前,用于对传入的参数做一些限制,常见属性如下:

  • name:用于指定前端传入的参数名称

  • defaultValue:当参数为非必传参数且前端没有传入参数时,指定一个默认值

请求:

代码:

@RequestParam:指定请求参数的名称

三、统一异常处理

使用SpringMVC后,异常就不必在三层代码去处理了,而是直接抛给框架,框架会将所有的异常统一转交给我们自定义的统一异常处理类来处理。

SpringMVC支持下面两个注解来实现全局异常处理(Aop的思想,对web层环绕通知)

  • @RestControllerAdvice 标注在类上,声明当前类是一个用于专门处理异常的类

  • @ExceptionHandler 标注在方法上,声明当前方法可以处理哪些异常

3.1 模拟异常

3.2 全局异常处理

运行结果:

四、Restful

REST是一种软件架构风格,其强调HTTP应当以资源为中心**在请求地址中尽量的不要出现动词**。

REST规范了HTTP请求动作,使用四个词语分别表示对资源的CRUD操作: GET(获取)、POST(新增)、PUT(更新)、DELETE(删除)

4.1 查询列表

请求:

代码:

4.2 根据id查询

请求:

代码:

4.3 添加

请求:

代码:

4.4 删除

请求:

代码:

五、总结

5.1 SpringMVC 注解

@RequestMapping:用于映射请求路径,可以定义在类和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。

@RequestBody:注解实现接收http请求的json数据,将json数据转换为Java对象

@RequsetParam:指定请求参数的名称

@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数

@ResponseBody:注解实现将controller方法返回对象转化为json对象相应给客户端

@RequestHeader:获取指定的请求头数据

@RestController= @Controller + @ResponseBody

5.2 接收请求参数

5.3 响应码状态

1:信息

2:200 ------ 成功

3:301 ------ 重定向

4:400 ------ 参数有问题

401 ------ 没有认证

403 ------ 权限不足

404 ------ 资源找不到

405 ------ 方法不支持

5:500 ------ 服务器错误

503 ------ 超时

相关推荐
geovindu6 分钟前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
Rain的Java大神之路8 分钟前
Java 工程师做 AI,核心机会在「落地」而非「训练」
java·后端·ai编程
柠檬味拥抱10 分钟前
基于 YOLO11 的六类生活垃圾视觉分类系统 | 用于社区投放点智能督导、分拣线品类分流、投错率统计分析 | 附完整源码与效果演示
后端
程序员小新70027 分钟前
RAG 实战与踩坑:交通法规智能问答助手
人工智能·后端
拖孩27 分钟前
AI 时代,个人开发者到底能不能靠一个小程序赚到钱
前端·后端·微信小程序
jimy129 分钟前
标准的动态类型定义与“多态”无关,非多态对象同样会出现动态类型不同于静态类型的情形
开发语言·c++
冬、不眠的夜29 分钟前
Nuitka 将 python 程序编译成 exe 指南
开发语言·python
CVer儿31 分钟前
起源1引擎相关知识点2--World Brush+func_detail
开发语言
EAIReport35 分钟前
SpringBoot 与 SpringCloud 深度解析:核心特点、差异与协同关系
spring boot·后端·spring cloud
梦里寻码40 分钟前
从 0 到 1 用 NestJS + LangChain 搭一套可售卖的 SaaS AI 客服:挂件一行代码接入,知识库秒变 SEO 帮助中心
前端·后端·github