【SpringBoot】五:Web服务---SpringMVC---控制器

news2024/11/19 0:39:53

文章目录

  • 1 控制器介绍
  • 2 控制器工作流程
  • 3 控制器中的方法
  • 4 匹配请求路径到控制器方法
  • 5 RequestMapping
  • 6 控制器方法参数类型与可用返回值类型
  • 7 接收请求参数
  • 8 验证参数
    • 8.1 Bean Validation
    • 8.2 分组校验
    • 8.3 ValidationAutoConfiguration

1 控制器介绍

(1)什么是控制器?
控制器是一种由Spring 管理的 Bean 对象,赋予角色是“控制器”。作用是处理请求,接收浏览器发送过来的参数,将数据和视图应答给浏览器或者客户端 app 。
控制器是一个普通的 Bean,使用@Controller 或者@RestController 注释。@Controller 被声明为@Component。所以它就是一个 Bean 对象。

(2)如何创建控制器
在java类上加入@Controller或者@RestController。
其中@RestController包含@Controller,@RestController在@Controller基础上加入了@ResponseBody
在这里插入图片描述
在这里插入图片描述

2 控制器工作流程

在这里插入图片描述

3 控制器中的方法

  • 注解@RequestMapping(value=“请求的url地址”):表示这个url的请求由当前方法去处理
    @GetMapping @PostMapping @PutMapping @DeleteMapping
  • 控制器方法的形参,接收请求参数,多种方法接收请求参数
  • 控制方法的返回值,表示应答的结果(包括数据,或者视图)。

4 匹配请求路径到控制器方法

(1)路径匹配策略

有path_pattern_parser(性能好)和ant_pattern_parser
在这里插入图片描述
(2)path_pattern_parser规定的关于uri的定义

通配符:
? : 一个字符
* : 0 或多个字符。在一个路径段中匹配字符
**:匹配 0 个或多个路径段,相当于是所有
正则表达式: 支持正则表达

(3)RESTFul 的支持路径变量

  • {变量名}
  • {myname:[a-z]+}: 正则匹配 a-z 的多个字面,路径变量名称“myname”。@PathVariable(“myname”)
  • {*myname}: 匹配多个路径一直到 uri 的结尾
通配符匹配
匹配只有一个字符
*匹配一个路径段中的 0 或多个字
**匹配 0 或多段路径
@GetMapping(“/order/{*id}”){*id} 匹配 /order 开始的所有请求, id 表示 order 后面直到路径末尾的所有内容。id 自定义路径变量名称。与@PathVariable 一样使用
@GetMapping(“/pages/{fname:\\w+}.log”)

表中红色是正则表达式。

5 RequestMapping

  • value:别名 path 表示请求的
  • method:请求方式,支持 GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE。

如果不用method,可以使用如下的快捷注解代替:
@GetMapping: 表示 get 请求方式的@RequestMapping
@PostMapping:表示 post 请求方式的@RequestMapping
@PutMapping:表示 put 请求方式的@RequestMapping
@DeleteMapping: 表示 delete 请求方式的@RequestMapping

6 控制器方法参数类型与可用返回值类型

7 接收请求参数

接收请求参数的方式:
 请求参数与形参一一对应,适用简单类型。形参可以有合适的数据类型,比如 String,Integer ,int 等。
 对象类型,控制器方法形参是对象,请求的多个参数名与属性名相对应。
 @RequestParam 注解,将查询参数,form 表单数据解析到方法参数,解析 multipart 文件上传。
 @RequestBody,接受前端传递的 json 格式参数。
 HttpServletRequest 使用 request 对象接受参数, request.getParameter(“…”)
 @RequestHeader ,从请求 header

(1)一对一

【 ParameterController.java】
在这里插入图片描述

(2)使用对象
【ParameterController.java】
在这里插入图片描述

(3)使用HttpServletRequest
【ParameterController.java】
在这里插入图片描述

(4)使用@RequestParam
【ParammaterController.java】
在这里插入图片描述

(5)使用@RequestHeader
控制器方法:
在这里插入图片描述

相应结果
在这里插入图片描述

(6) 使用@RequestBody
在这里插入图片描述
(7)Reader-InputStream
在这里插入图片描述
(8)数组参数
在这里插入图片描述

8 验证参数

8.1 Bean Validation

(1)添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

(2)使用Bean Validation

package com.sdnu.quickweb.vo;

import lombok.Data;

import javax.validation.constraints.*;

@Data
public class ArticleVO {

    //文章主键
    private Integer id;

    @NotNull(message = "必须有作者")
    private Integer userId;

    //同一个属性可以指定多个注解
    @NotBlank(message = "文章必须有标题")
    //@Size 中 null 认为是有效值.所以需要@NotBlank
    @Size(min = 3,max = 30,message = "标题必须 3 个字以上")
    private String title;

    @NotBlank(message = "文章必须副标题")
    @Size(min = 8,max = 60,message = "副标题必须 30 个字以上")
    private String summary;

    @DecimalMin(value = "0",message = "已读最小是 0")
    private Integer readCount;

    @Email(message = "邮箱格式不正确")
    private String email;
}
package com.sdnu.quickweb.controller;

import com.sdnu.quickweb.vo.ArticleVO;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class ArticleController {
    @RequestMapping("/article/add")
    public Map<String, Object> articleAdd(@Validated @RequestBody ArticleVO articleVO, BindingResult br) {
        // service方法处理文章业务
        // 返回数据
        Map<String, Object> errorMap = new HashMap<>();
        if (br.hasErrors()) {
            List<FieldError> list = br.getFieldErrors();
            list.forEach(fieldError -> {
                errorMap.put(fieldError.getField(), fieldError.getDefaultMessage());
            });
        }
        return errorMap;
    }
}

测试:
在这里插入图片描述
测试结果:
在这里插入图片描述

8.2 分组校验

AddArticleGroup和EditArticleGroup的区别是id的校验不同,其它相同
vo:
在这里插入图片描述
controller控制器:
在这里插入图片描述
测试AddArticleGroup
在这里插入图片描述
测试EditArticleGroup
在这里插入图片描述

8.3 ValidationAutoConfiguration

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux Network】数据链路层

目录 认识以太网 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 认识MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对于TCP协议的影响 MSS和MTU的关系&#xff1a; 查看硬件地址和MTU ARP协议 ARP协议的作用 ARP协议的工作流程 ARP数据报的格式 DNS(Domain Name System) …

近期要做填报报表,使用Spreadsheet还是Finereport?

又是忙碌的五月呀~~近期接到一个项目&#xff0c;是一家商贸公司需要去采集销售部门的销售业绩据&#xff0c; 以往他们使用Excel表格线下去做报表填报&#xff0c;传统的报表体系效率低&#xff0c;文件杂&#xff0c;汇总难。下级部门上传数据需要以多个表格来上报&#xff0…

Python3安装

依赖安装 gcc是一个用于linux系统下编程的编译器&#xff0c;由于python3需要编译安装&#xff0c;因此&#xff0c;需要首先安装gcc。先查看一下系统中&#xff0c;是否安装了gcc。 gcc --versions 发现没有安装&#xff0c;则需要安装。参数-y的作用是在安装过程中自动确认…

在 Python 中制作偶数列表

文章目录 开始什么是偶数在 Python 中使用 for 循环创建偶数列表在 Python 中使用 while 循环制作偶数列表使用列表理解在 Python 中制作偶数列表使用 Lambda 表达式在 Python 中创建偶数列表 开始 我们将通过示例介绍偶数列表以及在 Python 中创建偶数列表的不同方法。 什么是…

今天公司来了个拿 30K 出来的测试,算是见识到了基础的天花板

今天上班开早会就是新人见面仪式&#xff0c;听说来了个很厉害的大佬&#xff0c;年纪还不大&#xff0c;是上家公司离职过来的&#xff0c;薪资已经达到中高等水平&#xff0c;很多人都好奇不已&#xff0c;能拿到这个薪资应该人不简单&#xff0c;果然&#xff0c;自我介绍的…

韩国访问学者签证D-2-5材料准备及签证流程

韩国的签证种类很多&#xff0c;对于申请访问学者签证来说&#xff0c;较常见的签证种类是D-2-5签证和E-3签证&#xff0c;本篇知识人网小编先介绍D-2-5签证。 签证的材料准备 根据韩国大使馆2023年4月12日最新发布的“签证申请与准备材料指导”内容, D-2-5签证的签发对象及准…

一文带你了解电信终端指南(详细篇)

​ 电信入库认证周期&#xff1a; 常规为 4-6 周&#xff0c;我公司可加急完成认证&#xff0c;请拨打免费服务热线 400 626 0709 或联系 蒋先生 13823213584&#xff08;微信同号&#xff09;了解详情。 中国电信集团公司是我国特大型国有通信企业、上海世博会全球合作伙伴&a…

Yolov5轻量化:EMO,结合 CNN 和 Transformer 的现代倒残差移动模块设计,性能优于EdgeViT、Mobile-former等网络

论文: https://arxiv.org/pdf/2301.01146.pdf 🏆🏆🏆🏆🏆🏆Yolo轻量化模型🏆🏆🏆🏆🏆🏆 重新思考了 MobileNetv2 中高效的倒残差模块 Inverted Residual Block 和 ViT 中的有效 Transformer 的本质统一,归纳抽象了 MetaMobile Block 的一般概念。受这…

深度学习4 -- 卷积神经网络(代码实现篇+付详细流程文件)

引言 本文是使用pytorch对卷积神经网络(Convolutional Neural Network, CNN)的代码实现&#xff0c;作为之前介绍CNN原理的一个代码补充。本文代码相关介绍相对较为详细&#xff0c;也为自己的一个学习过程&#xff0c;有错误的地方欢迎指正。本人介绍CNN原理的链接:CNN原理介…

【Ai工具合集,一定有你需要的!】

花费了一天的时间测试了市面上各大Ai工具&#xff0c;然后帮大家整理总结出来了这些工具&#xff0c;一定记得点赞收藏保存&#xff0c;后面肯定会用到&#xff01; 使用说明 1.部分Ai工具需要魔法上网&#xff0c;请自行解决&#xff1b;部分工具需要收费&#xff0c;可以尝…

图神经网络:(处理点云)PointNet++的实现

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 简单前置工作学习文献阅读PointNet的实现模型问题 简单前置工作…

convLSTM2D 层使用方法解析(Keras库)

最近在研究时序图像分类问题&#xff0c;需要用到convLSTM层提取特征&#xff0c;所以在此仔细分析一下keras.layers.ConvLSTM2D层的使用方法。深度学习框架是tensorflow 官方文档&#xff1a;recurrent/#convlstm2d - Keras 中文文档 下面这部分内容摘自官方文档 ConvLSTM2D…

Axure 轮播图如何制作

近来在学习axure&#xff0c;用的版本为Axure 9&#xff0c;给大家讲一下怎么使用轮播图&#xff0c;老规矩保姆式教学法 一、作图 1.创建新的页面&#xff0c;方便我们做图 2.在元件库搜索“动态面板”字样&#xff0c;设置一个动态面板&#xff0c;为什么要设置呢&#xff…

IIC总线通讯协议学习

​ IIC(最简单的总线通讯,简单意味着通用和普适性) iic通讯一般采用一主多从的方式.同一时间要么在发送信息,要么在读取信息(半双工通讯) ​​​​​​​​​​​​​​ ​​​​ ​​​ 标准的写数据帧&#xff08;主机向从机写数据) 解释以上的写数据帧 S:起始信号(在SCL…

Linux学习---VMWare安装和CentOS7安装

1、 VMWare安装 1、VMware16安装包 链接&#xff1a;https://pan.baidu.com/s/1TKf5szN6k5Hk4HH4zqBgrg 提取码&#xff1a;zhm6 –来自百度网盘超级会员V1的分享 2、VMWare安装流程 &#xff08;1&#xff09;找到下载好的安装包&#xff0c;双击运行程序 &#xff08;2&…

云贝餐饮连锁V2-2.7.7 【新增】外卖新订单提醒

独立版&#xff1a;云贝餐饮连锁V2、版本更新至2.7.7&#xff0c;小程序、公众号版本&#xff0c;全插件&#xff0c;包含微信公众号小程序&#xff1b;包更新&#xff0c;独立版&#xff1b; 带商家端&#xff0c;修复收银台、排队点餐、堂食点餐&#xff1b;最新版更新了&…

【pytorch损失函数(3)】nn.L1Loss()和nn.SmoothL1Loss()

文章目录 【回归损失函数】L1&#xff08;MAE&#xff09;、L2&#xff08;MSE&#xff09;、Smooth L1 Loss详解1. L1 Loss&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09;1.1 数学定义1.2 、使用场景与问题1.3 、如何使用 2. L2 Loss&#xff08;Mean Squared E…

最流行的开源 LLM (大语言模型)整理

本文对国内外公司、科研机构等组织开源的 LLM 进行了全面的整理。 Large Language Model (LLM) 即大规模语言模型&#xff0c;是一种基于深度学习的自然语言处理模型&#xff0c;它能够学习到自然语言的语法和语义&#xff0c;从而可以生成人类可读的文本。 所谓"语言模…

MTK平台的SWT异常的简单总结(1)——WatchDog

SWT系列资料很多来源于Google &#xff08;1&#xff09;概念相关 SWT是SoftWare Watchdog Timeout的缩写&#xff0c;在Android系统中&#xff0c;为了监控SystemServer是否处于正常运行状态&#xff0c;加入了SWT线程来监控SystemServer中重要线程和Service的运行情况。判断…

多线程-程序、进程、线程与并行、并发的概念

多线程 本章要学习的内容&#xff1a; 专题1&#xff1a;相关概念的理解专题2&#xff1a;多线程创建方式一&#xff1a;继承Thread类专题3&#xff1a;多线程创建方式二&#xff1a;实现Runnable接口专题4&#xff1a;Thread类的常用方法专题5&#xff1a;多线程的优点、使用…