当前位置: 首页 > article >正文

SpringMVC2

一、springmvc 接收请求

类上、方法上

@RequestMapping

@GetMapping

@PostMapping

package com.hl.springmvc02.web;
​
import jdk.nashorn.internal.objects.annotations.Getter;
import org.springframework.web.bind.annotation.*;
​
@RestController
@RequestMapping("/user")
public class UserController {//get 请求默认访问方法@GetMappingpublic String welcome(){System.out.println("welcome");return "welcome!";}//post请求执行的默认方法@PostMappingpublic String welcome2(){System.out.println("welcome2");return "welcome2!";}/*url: http://localhost:8080/user/save@RequestMapping:默认情况下,接收任意类型请求限制只能接收特定请求  method = RequestMethod.GET 只接收get请求method = RequestMethod.GET|POST|PUT|DELETE*/@RequestMapping(value = {"/save1","/save2","/save"},method = RequestMethod.GET)public void save(){System.out.println("save");}
}
​

二、springmvc 接收数据

1、接收参数
package com.hl.springmvc02.web;
​
import com.hl.springmvc02.pojo.Product;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
​
import javax.servlet.http.HttpServletRequest;
​
@RestController
@RequestMapping("/product")
public class ProductController {/*接收数据方式一、原生 HttpServletRequest 接收数据*/@RequestMapping("/save")public String save(HttpServletRequest request){//接收参数  返回值只能是字符串类型String name = request.getParameter("name");String id = request.getParameter("id");//类型转换时,需要手动转换if(id !=null && id!=""){System.out.println(Integer.parseInt(id));}return "save!"+id+"---"+name;}/*方式二:通过参数名称接收  要求  url后传递的参数名和方法的形参名保持一致http://localhost:8080/product/save2?id=11&name=admin尽可能使用包装类,而不是基本数据数据类型*/@RequestMapping("/save2")public String save2(Integer id,String name){return "save!"+id+"--"+name;}@RequestMapping("/save3")public String save3(int id,String name){return "save!"+id+"--"+name;}/*方式三、参数名称不一致时  @RequestParam(name = "username")  参数映射1、限制是否允许为空  @RequestParam 默认不允许为空@RequestParam(required = false)required = false  是否允许为空2、是否给默认值 @RequestParam(defaultValue = "12345")*/@RequestMapping("/save4")public String save4(@RequestParam(defaultValue = "12345",required = false) Integer id,@RequestParam(name = "username") String name){return id+"---"+name;}/*方式四、通过对象接收数据 (当前端传递的参数名和对象的属性名保持一致时)http://locahost:8080/product/save5?id=12&name=admin*/@RequestMapping("save5")public Product save5(Product product,String name1){System.out.println(name1);return  product;}/*方法五、restful风格接收(@PathVariable 地址栏传参)http://localhost:8080/product/save6/1/admin微服务中推荐的模式*/@RequestMapping("/save6/{id1}/{name}")public Product save6(@PathVariable(name = "id1") Integer id,@PathVariable(required = false) String name){System.out.println(id+"---"+name);return new Product(id,name);}

2、cookie数据

/*cookie传递数据@CookieValue 从cookie中获取数据,根据key找到value*/
@RequestMapping("/cookie")
public String getCookie(@CookieValue(name = "username",required = false)String username){return username;
}

3、请求头中数据
@RestController
@RequestMapping("/order")
public class OrderController {
​/*@RequestHeader(name = "user-agent") String userAgent获取浏览器请求头中特定key对应的value*/@RequestMapping("/header")public String header(@RequestHeader(name = "User-Agent") String userAgent,@RequestHeader(name = "token") String token){return userAgent+"---"+token;}
}

4、接收其他controller转发的数据

业务操作:调用service

package com.hl.springmvc02.web;
​
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
​
import javax.servlet.http.HttpServletRequest;
​
@Controller
@RequestMapping("/s1")
public class DispatcherController {
​@RequestMapping("/getMsg")public String getMsg(HttpServletRequest request){System.out.println("getMsg......");//获取浏览器传递的参数String msg = request.getParameter("msg");//一次转发过程中携带数据(传递数据)request.setAttribute("msg1","hello world!");//转发到其他的controller方法return "/s1/getData";}
​@RequestMapping("/getData")public String getData(HttpServletRequest request,@RequestAttribute(required = false) String msg1){System.out.println("getData......");//获取request转发携带的数据System.out.println(request.getAttribute("msg1"));System.out.println("--注解获取--"+msg1);//转发到页面return "/index.html";}
}
 

三、前后端分离:返回数据给前端(前后端一体,转发,重定向页面跳转)

@ResponseBody
@RestController
统一返回数据格式

声明一个结果集R类

package com.hl.springmvc02.pojo;
​
import lombok.Data;
​
/*
R ---> 结果集对象(响应对象)
统一封装  服务端返回给前端的数据*/
@Data
public class R {private Integer code;//状态码private String msg;//描述信息private Object data;//传递的数据
​//成功的方法public static R ok() {return new R(200,"操作成功",null);}//成功的方法public static R ok(Object data) {return new R(200,"操作成功",data);}//成功的方法public static R ok(String msg ,Object data) {return new R(200,msg,data);}//失败的方法public static R fail(String msg) {return new R(201,msg,null);}
​public R(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}
​public R() {}
}
 
package com.hl.springmvc02.web;
​
import com.hl.springmvc02.pojo.R;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@RequestMapping("/response")
public class ResponseController {@RequestMapping("/data")public R data(){//业务逻辑return R.ok();}@RequestMapping("/data2")public R data2(){return R.ok("新增成功",null);}@RequestMapping("/data3")public R data3(){return R.fail("用户名已存在!");}
}

四、各种常见错误及解决方案

常见错误类型:
404:路径未找到   http://localhost:8080/product/save4
405: 方法不匹配   前端get ---->  服务端@PostMapping       @RequestMapping(method="")
400: 参数赋值错误
       前端id=abc   服务端:Integer id
       前端没有传递id null  服务端  int id  null--->int 报错
       前端id没有传值     服务端  @RequestParam(required=true)  Integer id
500: 服务端错误
   1、接收到请求了
   2、接收到数据
   3、方法体报错

五、springmvc的内部执行流程

springmvc实现的功能

1、springmvc接收请求

2、springmvc接收数据

3、返回数据给前端

4、页面跳转(携带数据)

springmvc内部核心组件

1、DispatcherServlet 前端控制器

2、HandlerMapping 处理器映射器

3、HandlerAdapter 处理器适配器

4、Handler 处理器

5、ViewResolver 视图解析器组件

springmvc内部执行流程

六、mvc设计模式

MVC 架构 model 业务层、view 视图层、controller控制层

view 视图层:用户交互 html、css、js、vue、小程序

controller 控制层: 接收前端请求、接收前端数据、返回数据给前端 spring webmvc (web包)

model 业务层: 业务操作 service、dao、pojo

总结

1、接收请求的方式

@RequestMapping ,@GetMapping,@PostMapping 区别

2、接收数据

参数、请求头、cookie、接收其他controller转发的数据

@RequestBody 注解(没讲 ,接收前端传递的json数据)

3、返回数据给前端 R

code | msg | data

4、各种常见的错误及解决方案

相关文章:

SpringMVC2

一、springmvc 接收请求 类上、方法上 RequestMapping GetMapping PostMapping package com.hl.springmvc02.web; ​ import jdk.nashorn.internal.objects.annotations.Getter; import org.springframework.web.bind.annotation.*; ​ RestController RequestMapping(&qu…...

【每日一题丨2025年5.12~5.18】排序相关题

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.12】P1068 [NOIP 2009 普及组] 分数线划定2. 【5.13】P5143 攀爬者3. 【5.14】P12366 [蓝桥杯 2022 省 Python B] 数位排序4. 【5.15】P10901 [蓝桥杯 2024 省 C] 封闭图形个数5.【5.16】P12165 [蓝桥…...

ElasticSearch性能优化

ES基础概念介绍: 索引:类似于MySQL中的表,它是具有相同特征的一个数据集。文档:格式为JSON格式,类似于MySQL中的一条数据,它是数据存储的基本数据单元,每一条文档都有一个唯一的ID。查询&#x…...

Typora + PicGo + GitHub 配置图床——图片自动上传 详细教程

文章目录 一、创建 GitHub 仓库二、添加私人令牌三、下载 PicGo四、配置 PicGo五、测试 一、创建 GitHub 仓库 进入 Github 官网 注册一个属于自己的账号,点击创建仓库。 2. 创建自己的新仓库。仓库设置为公开,方便上传图片(你设置私有也可以…...

QT+Visual Studio 配置开发环境教程

一、QT架构 Qt Creator 是一个轻量级、跨平台的 IDE,专为 Qt 开发量身打造,内置对 qmake/CMake 的深度支持、Kits 配置管理、原生 QML 调试器以及较低的资源占用维基百科。 而在 Windows 环境下,Visual Studio 配合 Qt VS Tools 扩展则可将 Q…...

缺乏经验的 PCB 过孔建模方法

您是一名背板设计人员,被指派设计一种新的高速、多千兆位串行链路架构,从多个线卡到背板上的多个交换矩阵交换卡。这些链路必须在第一天以 6GB/s 的速度运行,并且为 10GB/s (IEEE 802.3KR) 做好产品演进的准备。时间表很紧,您需要提出一个背板架构,以允许程序的其余部分…...

layui 介绍

layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用…...

【漫话机器学习系列】265.普拉托变换的相关问题(Issues With Platt Scaling)

Platt Scaling 的相关问题详解 | 模型校准中的隐患分析 在机器学习模型中,模型预测的“置信度”并不一定等于真实的概率。为了提高模型预测结果的可解释性和实用性,我们通常会使用一种后处理的概率校准方法——Platt Scaling(普拉托变换&…...

【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈

【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈 高性能网络学习目录 基础内容(两周完成): 2.1网络编程 2.1.1多路复用select/poll/epoll2.1.2事件驱动reactor2.1.3http服务器的实现 2.2网络原理 百万并发…...

LlamaIndex

1、大语言模型开发框架的价值是什么? SDK:Software Development Kit,它是一组软件工具和资源的集合,旨在帮助开发者创建、测试、部署和维护应用程序或软件。 所有开发框架(SDK)的核心价值,都是降低开发、维护成本。 大语言模型开发框架的价值,是让开发者可以更方便地…...

springboot使用xdoc-report包导出word

背景:项目需要使用xdoc-report.jar根据设置好的word模版,自动填入数据 导出word 框架使用 我的需求是我做一个模板然后往里面填充内容就导出我想要的word文件,问了下chatgpt还有百度,最后选用了xdocreport这个框架,主…...

leetcode 3356. 零数组变换 II 中等

给定一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri]。 对于每个查询 queries[i]: 在 nums 的下标范围 [li, ri] 内选择一个下标 子集。将选中的每个下标对应的元素值减 1。 零数组 是指所有元素都等于 0 的数组。 …...

重拾GMP

目录 GMP总结 线程协程三家对比GMP调度模型 mgp过一遍流程 g 一个G的生命周期 mpschedt全局队列g0视角看看G的调度流程 四大调度类型 主动调度被动调度正常调度抢占调度 宏观的调度流程上面流程的具体细节 schedule()findRunnable()execute()gosched_m()park_m()与ready()goe…...

实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验

实验背景 流式细胞仪与微流控技术,为细胞及细胞核成像提供新的路径。传统流式细胞仪在细胞核成像检测方面存在检测通量低,荧光信号微弱等局限,故某光学重点实验室开发一种基于高灵敏度sCMOS科学相机并集成在自组荧光显微镜的微流控细胞核成像…...

C++学习:六个月从基础到就业——C++11/14:其他语言特性

C学习:六个月从基础到就业——C11/14:其他语言特性 本文是我C学习之旅系列的第四十四篇技术文章,也是第三阶段"现代C特性"的第六篇,主要介绍C11/14中引入的其他重要语言特性。查看完整系列目录了解更多内容。 引言 在前…...

【Linux笔记】——线程池项目与线程安全单例模式

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹: 【Linux笔记】——简单实习一个日志项目 🔖流水不争,争的是滔滔不息 一、线程池设计二…...

数据驱动的社会舆情监测与分析——用算法洞察世界脉动

数据驱动的社会舆情监测与分析——用算法洞察世界脉动 在信息爆炸的时代,社会舆情的变化可以在极短时间内产生深远影响。从企业品牌到公共政策,社交媒体和新闻平台上的讨论能够直接影响决策者的策略制定。因此,数据驱动的舆情监测与分析 逐渐成为政府、企业以及社会机构的重…...

OD 算法题 B卷 【最佳植树距离】

文章目录 最佳植树距离 最佳植树距离 在直线的公路上种树,给定坑位数量和位置,及需要种多少棵树苗;树苗之间的最小距离是多少时,可以保证种的最均匀(树苗之间的最小距离最大); 输入描述&#…...

ZooKeeper 原理解析及优劣比较

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 引言 在分布式系统中,服务注册、配置管理、分布式锁、选举等场景都需要一个高可用、一致性强的协调服务。Apache ZooKeeper 凭…...

实战5:个性化数字艺术生成与销售

盈利思路 数字艺术销售: 平台销售:将生成的数字艺术作品上传到像OpenSea、Foundation等NFT平台进行售卖。每一件独特的艺术品可以通过NFT技术保证其唯一性,吸引收藏家和投资者。 定价策略:根据作品的复杂度、创意性以及市场需求来…...

是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?

内容来源:是德科技 随着数据中心规模的不断扩大以及AI大模型等技术的兴起,市场对高速、大容量数据传输的需求日益增长。例如,AI训练集群中GPU等设备之间的互联需要更高的传输速率来提升效率。在技术升级方面,SerDes技术的不断进步…...

OceanBase 开发者大会,拥抱 Data*AI 战略,构建 AI 数据底座

5 月 17 号以“当 SQL 遇见 AI”为主题的 OceanBase 开发者大会在广州举行,因为行程的原因未能现场参会,仍然通过视频直播观看了全部的演讲。总体来说,这届大会既有对未来数据库演进方向的展望,也有 OceanBase 新产品的发布&#…...

STM32IIC协议基础及Cube配置

STM32IIC协议基础及Cube配置 一,IC协议简介1,核心特点2,应用场景 二,IC协议基础概念1,总线结构2,主从架构3,设备寻址4,起始和停止条件5,数据传输6,应答机制 三…...

CNN vs ViT:图像世界的范式演进

一、图像建模,是不是也可以“大一统” 在前文中我们提到,多模态大模型打破“只能处理文字”的限制。 在 NLP 世界里,Transformer 已经证明自己是理解语言的王者。那么在图像世界,我们是否也能有一种“通用架构”,让模…...

cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins

cocos 版本2.4.11 在windows上jenkins的具体配置和部署,可参考上一篇文章cocos creator使用jenkins打包流程,打包webmobile_jenkins打包,发布,部署cocoscreator-CSDN博客 特别注意,windows上运行jenkins需要关闭windows自己的jenkins服务&a…...

定时器的两种实现方式

1、基于优先级队列/堆 队列是先进先出,优先级队列是优先级越高就存放在队列之前,我们可以将过期时间越早设置为优先级越高,那么临近过期时间的任务就会在队列前面,距离过期时间越晚的任务就在队列后面。 可以分配一个线程&#…...

Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter

一、Python Python是一种高级、通用、解释型的开源编程语言,由Guido van Rossum于1990年代初设计。它具有以下显著特点: 1‌.语言特性‌ (1) 语法简洁易读,接近自然语言(如print(“Hello World!”)) (2) 采用强制缩进而非大括号定义代码块 (3) 支持面向对象、函数式和过…...

[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)

[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十) 一、MinIO简介与核心原理 MinIO 是一款高性能、开源的分布式对象存储系统,兼容 Amazon S3 API,适用于存储图片、视频、日志等非结构化数据。其核心特…...

MacBook Air A2179(Intel版)安装macOS Catalina所需时间

MacBook Air A2179(Intel版)安装macOS Catalina所需时间如下: 一、标准安装时间范围 常规安装(通过App Store) • 下载时间:约30-60分钟(取决于网络速度,安装包约8GB) •…...

AI在人力资源领域的应用:把握时代浪潮

借鉴历史经验,引领技术变革 历史总是呈现出惊人的相似性。十年前,众多企业未能及时洞察移动技术与社交技术的潜在价值,迟迟没有将这些创新引入职场环境。随着时间推移,这些组织才意识到BYOD(自带设备办公)…...