《JavaEE进阶》----4.<SpringMVC①简介、基本操作(各种postman请求)>

本篇博客讲解

MVC思想、及Spring MVC(是对MVC思想的一种实现)。

Spring MVC的基本操作、学习了六个注解

@RestController注解

@RequestMappering注解

@RequestParam注解

@RequestBody注解

@PathVariable注解

@RequestPart注解

MVC

View(视图)

指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.

Model(模型)

是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.

Controller(控制器)

可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型。

CM相当于后端

V相当于前端。如今前后端分离。因此实际上我们已经不学V。虽然叫SpringMVC。

实际上我们学的是Spring Web。 


一、什么是SpringMVC 

官方解释:

Spring Web MVC是基于Servlet API构建的原始Web框架,从⼀开始就包含在Spring框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但通常被称为Spring MVC。

MVC是⼀种架构设计模式,也⼀种思想,而SpringMVC是对MVC思想的具体实现.除此之外,Spring
MVC还是⼀个Web框架.
总结来说,SpringMVC是⼀个实现了MVC模式的Web框架.
所以,SpringMVC主要关注有两个点:
1. MVC
2. Web框架

Spring MVC全称是Spring Web MVC
在创建SpringBoot项⽬时,我们勾选的Spring Web框架
其实就是Spring MVC框架:

Spring实现了MVC这个思想。因此叫做SpringMVC。


二、在IDEA创建项目方式

和上文Springboot创建方式是一样的


三、学习SpringMVC(基本操作)

既然是Web框架,那么当⽤⼾在浏览器中输⼊了url之后,我们的 SpringMVC项⽬就可以感知到⽤⼾
的请求,并给予响应.
咱们学习SpringMVC,重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.
主要分以下三个⽅⾯:

 
3.1 建立+连接(两大注解):

使用@ReQuestMapping注解,设置网址中资源访问的部分。

3.1.1 @RequestMappering作用在类上

作用在类上就是类路径。

3.1.2 @RequestMappering作用在方法上

作用在类上就是方法路径。

如上图,访问时:类路径+方法路径

我们通常会加上类路径的,这样方便我们查找是哪里的问题出错。如果只有方法路径,不好找并且容易冲突。如果加上类路径,那么这个路径通常对应这个类名。因此方便我们找到对应的代码。

端口号是1208

因此它的访问地址就是127.0.0.1:1208/calc/sum

程序写好之后要建立连接

通过@RequestMappering注解和浏览器建立连接。是url的一个映射。通过这个还是不能成功建立连接。因为项目中会有很多文件代码。为了更方便Spring找到建立了连接的方法。

通过

3.1.3 @RestController注解

来告知程序这边代码里建立连接了

将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring程序。

注解括号中的 / 也可以不写。建议加上。

注:路径是不能重复的,不然会报错。  

3.2  使用Postman请求:

用户请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能.

我们可以通过postman来查看请求方式是get还是post 

通过浏览器访问的方式都是get。

Spring既支持get请求方式,又支持post请求方式。

后端请求时:使用postman或者浏览器,前端form表单等方式都可以。对于后端都是一样的。

也可以

使用Fiiddler

来查看请求和响应的数据

传入url,请求时可以设置请求方式、设置cookie 、添加参数

点击Send后我们可以查看响应、查看HTTP请求状态。

在body中,有

none:代表什么都没有 

form-data:代表form表单,有两种form表单形式,第一种是普通form表单,第二种可以上传一些图片、文件。

raw:表示请求体中的数据是原始的、未经过编码的数据。传递json数据就可以用到。

指定请求方式 :

在@RequestMapping传入参数method = RequestMethod.GET可以指定请求方式为get,此时就只能通过get来进行请求而不能使用别的方式了。

如果使用别的方式请求,则会报错。405表示请求方式出错。

    @RestControllerpublic class HelloController {@RequestMapping(value = "/hello",method = RequestMethod.GET)public String hello(){return "呜呜呜zzx大笨蛋!!!!!!";}}

注解里双引号的值会赋值给value这个属性。如果对多个属性赋值,需要写上属性的名字。如果只有一个属性且为value,那么属性名字可以省略。如下图就省略了value这个属性名字。

按住ctrl点进去可以查看注解里有什么属性。

@RestController

@RequestMapping

3.2.1 请求单个参数

注:不能使用基本类型。默认值为null。基本类型不支持。Spring范畴

方法名和路径我们可以保持一样也可以保持不一样,最好保持一样方便我们好找。

        @RequestMapping("/r1")public String r1(String name){return "接收到参数 name:"+name;}

定义参数要使用包装类型

        @RequestMapping("/r2")//注:传入数字类型不能使用int,因为int为基本数据类型,不能转换为空值// 其默认值不为null,我们需要将int写变为Integer。包装类型。public String r2(Integer age){return "age:"+age;}

我们使用postman来传入参数。

 3.2.2 请求多个参数

        @RequestMapping("/r3")public String r3(String name,Integer age){return "name:"+name+"age:"+age;}

 

3.2.3 传入对象参数

添加有参构造函数时,记得把无参构造函数补上

首先新建一个类,对参数进行包装,利用get,set方法和toStirng方法。来进行构造。

注:这里可以使用基本类型,如int 默认值为0;java范畴。

package org.example.springbootdemo;public class UserInf {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "UserInf{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

使用刚刚新建的类,来传入类参数,返回一个toString方法。 

        @RequestMapping("/r4")public String r4(UserInf user){return user.toString();}

 传参与之前一样。 

 3.2.4 参数重命名(@RequestParam注解)

        @RequestMapping("/r5")//重命名后,才能正常访问到url//必须传入正确的参数?name =  age =public String r5(@RequestParam("name") String username,Integer age){return "username:"+username+",age:"+age;}

我们需要重命名哪个参数就在哪个参数前使用@RequestParam注解。

前端传参时我们使用重命名的参数来传参,在后端操作时我们继续使用原来的名字 

注:加上@RequestParam注解重命名后的参数为必传参数。否则会报错400

若发生缓存错误我们进行clean。

 

从请求中获取name的参数,并赋值给username参数。

后端要用的话只能使用username,而前端那边使用name。 

令参数为非必传参数 (required = false)。

在@RequestParam注解的第二个参数传入

        @RequestMapping("/r5")//重命名后,才能正常访问到url//必须传入正确的参数?name =  age =public String r5(@RequestParam(value = "name",required = false) String username,Integer age){return "username:"+username+",age:"+age;}

3.2.5 传递数组参数 

        @RequestMapping("/r6")public String r6(String[] arr){return Arrays.toString(arr)+"数组长度:"+arr.length;}

它可以是数组,也可以是字符串。 

如上图这样传,那么他就是一个数组。 

这样传那么就相当于传入字符串 

当我们有多个名字一个的参数时,会把他拼接成一个数组 

3.2.6 传递集合参数(List<String> list)

集合参数:和数组类似,同一个请求参数名有为多个,但需要@RequestParam来绑定参数关系

如果我们这样写会发生500错误,服务器端错误,在传入集合类时,我们需要用到

        @RequestMapping("/r7")public String r7(List<String> list){return list.toString();}

@RequestParam注解来绑定list这个参数才可以。

默认情况下,请求中参数名相同的多个值是封装到数组,如果要封装到集合,需要使用@RequestParam来绑定参数关系。

注:加上@RequestParam注解的参数为必传参数,如果我们不想传参就可以令@RequestParam注解第二个参数为required = false。

        @RequestMapping("/r7")public String r7(@RequestParam(value = "list",required = false) List<String> list){return list.toString();}

如果定义集合为非必传,如果没有传入,此时如果运行,我们会发现会报一个500的错误,是因为此时list发生空指针异常。我们需要额外添加代码。 

        @RequestMapping("/r7")public String r7(@RequestParam(value = "list",required = false) List<String> list){if(list != null){return list.toString()+"size:"+list.size();}return "list为空";}

3.2.7 传递json(@RequestBody注解)

Json(JavaScript Object Notation)【JavaScript对象表示法】

Json和JavaScript没有关系,只是语法相似。

简单来说:json就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON的本质是字符串,主要负责在不同语言中数据传递和交换。

Json的两种结构:

1.对象用{}表示

2.数组用[]表示

        @RequestMapping("/r8")public String r8(@RequestBody UserInf userInf){return userInf.toString();}

 

将{}中的参数转成了userinfo。传给了服务器。

区别是之前写的参数都是key,value的形式。

使用json传的是一个json字符串。也可以传入一个压缩的形式:

{"name":"张三","age":18,"id":120}

在企业开发中,用的最多的就是json和对象的方式,因为这两个扩展性很好。可以很好的增减参数。

注意:在body中raw中传入json数据时,如果params中还有参数存在,可以会影响json数据的传入。

用的最多的就是使用对象,和json的方式


3.2.8 获取url中的参数 (@PathVariable注解)

 path variable:路径变量

必传参数,虽然可以修改required = false 我们尽量不去修改。

和字⾯表达的意思⼀样,这个注解主要作用在请求URL路径上的数据绑定

    @RequestMapping("/r9/{articleId}")public String r9(@PathVariable Integer articleId){return "articleId:"+articleId;}

对参数重命名 

    @RequestMapping("/r9/{article}")public String r9(@PathVariable("article") Integer articleId){return "article:"+articleId;

要注意红方框中的数据要保持一致。 


3.2.9 上传文件(@RequestPart)

file.getOriginalFilename();返回文件原始名称

注解不加也可以运行成功,建议加上

    //虽然注解不加也可以,但是建议加上@RequestMapping("/r11")public String r11(@RequestPart MultipartFile file) throws IOException {String FileName = file.getOriginalFilename();//获取文件名file.transferTo(new File("J:/Test/"+FileName));//将此文件传到..目录下return "获取上传文件"+ file.getOriginalFilename();}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我用 GPT 学占星

最近对占星赶兴趣&#xff0c;但是看到星盘中好多名词&#xff0c;不懂是什么意思&#xff1f;所以直接问 gpt &#xff0c; 发现回答的真的很棒&#x1f389; &#xff01; 假如我想知道各个状态的具体是根据什么数据来显示的&#xff1f; 分分钟解决了我的问题&#xff1b; 我…

docker Desktop报错 error pulling image configuration 处理

问题描述 在 docker 拉数据 出现以下错误 error pulling image configurarion&#xff1a; 这个问题 主要是 可能应该某些原因不能网络无法连上镜像 原因分析&#xff1a; 1。 2024年 5月以后 国内很多IP都 。。。懂的都懂&#xff0c;很多 VPN 也是。。。 懂的都懂&#x…

7种常见排序

1 直接插入排序 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 。 void InsertSort(int* a, int n) {for (int i 0; i < n - 1; i){//划分区间【0&#xff0c;end】int en…

Ubuntu 24.04 安装 英特尔工具包 Intel® Toolkits

目录 1.采用用户界面 GUI 安装英特尔基本工具包 Intel oneAPI Base Toolkit 1.1 下载离线英特尔基本工具包 1.2 安装英特尔基本工具包 1.3 英特尔基本工具包 Intel oneAPI Base Toolkit 环境设置 2.安装英特尔高性能计算工具包 Intel HPC Toolkit 2.1 下载离线英特尔高性…

模型从 HuggingFace 转存到 ModelScope

由于 HuggingFace 网络访问比较慢&#xff0c;国内通常会使用魔搭下载模型&#xff0c;如果魔搭上还没有&#xff0c;需要从 HuggingFace 准存一下&#xff0c;本文将通过 Colab AliyunPan 的方式下载模型并进行转存。 登录Colab 并运行一下命令 安装依赖包&#xff0c;Hugg…

最新项目管理软件排行榜,90%大厂项目经理都在用!

本文是主流的热门项目管理软件排行榜&#xff0c;助力企业选型&#xff01; 项目管理软件排行榜就如同企业管理的指南针&#xff0c;能为企业在众多项目管理工具中找到最适合的那一款。 对于企业来说&#xff0c;如果没有好用的项目管理软件&#xff0c;就像航海者失去了罗盘&…

Python 数据分析笔记— Numpy 基本操作(上)

文章目录 学习内容&#xff1a;一、什么是数组、矩阵二、创建与访问数组三、矩阵基本操作 学习内容&#xff1a; 一、什么是数组、矩阵 数组&#xff08;Array&#xff09;&#xff1a;是有序的元素序列&#xff0c;可以是一维、二维、多维。 array1 [1,2,3] 或[a, b, c, d…

智能工厂监控升级:Sovit2D大屏展示和ARM计算机的完美搭档

在当今科技飞速发展的时代&#xff0c;智能工厂和环境监测领域对于高效、精准的监控系统的需求日益增长。Sovit2D 组态软件与 ARM 工业计算机的结合&#xff0c;为这些领域带来了全新的解决方案。 走进智能工厂的监控室&#xff0c;一台台 ARM 工业计算机正稳定地运行着 Sovit2…

Echarts可视化

echarts是一个基于javascripts的开源可视化图表库 画图步骤&#xff1a; 1.引入echarts.js文件 <script src" https://cdn.jsdelivr.net/npm/echarts5.5.1/dist/echarts.min.js"></script> 也可将文件下载到本地通过src引入。 2. 准备一个呈现图表的…

828华为云征文|华为云Flexus X实例docker部署harbor镜像仓库

828华为云征文&#xff5c;华为云Flexus X实例docker部署harbor镜像仓库 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定不要错…

Django+Vue二手交易平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

Having trouble using OpenAI API

题意&#xff1a;"使用OpenAI API遇到困难" 问题背景&#xff1a; I am having trouble with this code. I want to implement AI using OpenAI API in my React.js project but I cannot seem to get what the issue is. I ask it a question in the search bar in…

string详解

Golang详解string 文章目录 Golang详解stringGolang中为什么string是只读的&#xff1f;stirng和[]byte的转化原理[]byte转string一定需要内存拷贝吗&#xff1f;字符串拼接性能测试 Golang中为什么string是只读的&#xff1f; 在Go语言中&#xff0c;string其实就是一个结构体…

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

09-03 周二 ansible部署和节点管理过程

09-03 周二 ansible部署和节点管理过程 时间版本修改人描述2024年9月3日10:08:58V0.1宋全恒新建文档&#xff0c; 简介 首先要找一个跳板机&#xff0c;来确保所有的机器都可以访问。然后我们围绕ansible来搭建环境&#xff0c;方便一键执行所有的命令&#xff0c;主要的任务是…

SQL语言的规则和规范

规则 是什么呢&#xff0c;规则就是我们最基本&#xff0c;每时每刻都要遵守的比如人行道靠右&#xff0c;不能逆行&#xff0c; 规范 呢就是锦上添花&#xff0c;如果你不这么做&#xff0c;是不那么道德&#xff0c;不那么好的&#xff0c;就像小学生见到老师要问好&#…

机器学习:opencv图像识别--图片运算、边界、阈值处理、平滑处理

目录 一、图片运算 1.加法 1. 2.add 3.加权相加 2.减法 二、图片边界 三、图像阈值处理 四、图像平滑处理 1.生成椒盐噪声 2.滤波器 1.均值滤波 2.方框滤波 3.高斯滤波 4.中值滤波 一、图片运算 1.加法 1. 直接将图片上每个像素点的值加上给定值或者两张图片…

wpf image source绑定相对路径方法

当使用image source绑定相对路径图片资源时&#xff0c;出现问题&#xff1a;未能找到路径C:\windows/System32…路径的一部分 解决方法&#xff1a; 将文件放到指定文件夹中包含在当前项目中 具体绑定语句为&#xff1a; <Image Stretch"Fill" x:Name"imgT…

(计算机论文)基于SpringBoot和Vue的台球赛事服务网站的设计与实现

毕业设计&#xff08;论文&#xff09; 博主可接毕设论文&#xff01;&#xff01;&#xff01; 基于SpringBoot和Vue的台球赛事服务网站的设计与实现 摘 要 在快速发展的信息时代&#xff0c;体育竞赛作为群众文化娱乐的一部分&#xff0c;已日益受到广泛关注。台球&#xff…

python 怎样计算字符串的长度

python 计算字符串长度&#xff0c;一个中文算两个字符&#xff0c;先转换成utf8&#xff0c;然后通过计算utf8的长度和len函数取得的长度&#xff0c;进行对比即可知道字符串内中文字符的数量&#xff0c;自然就可以计算出字符串的长度了。 valueu脚本12 length len(value) u…