SpringBootWeb请求响应

请求

简单参数

在向服务器发起请求时,向服务器传递的是一些普通的请求数据。
在这里插入图片描述

原始方式知道原理即可,实际开发不会采用

在原始的Web程序当中,需要通过Servlet中提供的API:HttpServletRequest(请求对象),获取请求的相关信息。比如获取请求参数:
http请求时,服务器会把请求的相关信息封装到HttpServletRequest对象中
Controller中,我们要想获取Request对象,可以直接在方法的形参中声明HttpServletRequest 对象。然后就可以通过该对象来获取请求信息:

//根据指定的参数名获取请求参数的数据值
String request.getParameter("参数名")

关于文中出现的注解可在其他文章中了解

@RestController
public class RequestController {
//原始方式
	@RequestMapping("/simpleParam")
	public String simpleParam(HttpServletRequest request){
		// http://localhost:8080/simpleParam?name=Tom&age=10
		// 请求参数: name=Tom&age=10 (有2个请求参数)
		// 第1个请求参数: name=Tom 参数名:name,参数值:Tom
		// 第2个请求参数: age=10 参数名:age , 参数值:10
		String name = request.getParameter("name");//name就是请求参数名
		String ageStr = request.getParameter("age");//age就是请求参数名
		int age = Integer.parseInt(ageStr);//需要手动进行类型转换
		System.out.println(name+" : "+age);
		return "OK";
 	}
}

SpringBoot方式,主流方式

在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数。

@RestController
public class RequestController {
	// http://localhost:8080/simpleParam?name=Tom&age=10
	// 第1个请求参数: name=Tom 参数名:name,参数值:Tom
	// 第2个请求参数: age=10 参数名:age , 参数值:10
	//springboot方式
	@RequestMapping("/simpleParam")
	public String simpleParam(String name , Integer age ){
		//形参名和请求参数名保持一致
		System.out.println(name+" : "+age);
		return "OK";
 	}
}
请求参数名与形参变量名不一样会发生什么?controller方法中的形参还能接收到请求参数值吗?
@RestController
public class RequestController {
	// http://localhost:8080/simpleParam?name=Tom&age=20
	// 请求参数名:name
	//springboot方式
	@RequestMapping("/simpleParam")
	public String simpleParam(String username , Integer age ){
		//请求参数名和形参名不相同
		System.out.println(username+" : "+age);
		return "OK";
 	}
}

运行没有报错。 controller方法中的username值为:null,age值为20
结论:对于简单参数来讲,请求参数名和controller方法中的形参名不一致时,无法接收到请求数据

如何处理?

使用Spring提供的@RequestParam注解完成映射,在方法形参前面加上 @RequestParam 然后通过value属性执行请求参数名,从而完成映射。代码如下:

@RestController
public class RequestController {
	// http://localhost:8080/simpleParam?name=Tom&age=20
	// 请求参数名:name
	//springboot方式
	@RequestMapping("/simpleParam")
	public String simpleParam(@RequestParam("name") String 	username, Integer age ){
	System.out.println(username+" : "+age);
	return "OK";
 	}
}

注意:@RequestParam中的required属性默认为true(默认值也是true),代表该请求参数必须传递,如果不传递将报错,但可以手动设置为false

@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name", required =
false) String username, Integer age){
	System.out.println(username+ ":" + age);
	return "OK";
}

实体参数

在使用简单参数做为数据传递方式时,前端传递了多少个请求参数,后端controller方法中的形参就要书写多少个。如果请求参数比较多,通过上述的方式一个参数一个参数的接收,会比较繁琐。此时,我们可以考虑将请求参数封装到一个实体类对象中。 要想完成数据封装,需要遵守如下规则:

  • 简单实体参数
    在这里插入图片描述

  • 复杂实体参数
    请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。
    在实体类中有一个或多个属性,也是实体对象类型的。如:User类中有一个Address类型的属性(Address是一个实体类)
    在这里插入图片描述

  • 数组集合参数
    在HTML的表单中,有一个表单项是支持多选的(复选框),可以提交选择的多个值

    • 请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
      在这里插入图片描述
    • 请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系
      在这里插入图片描述

日期参数

因为日期的格式多种多样(如:2022-12-12 10:05:45 、2022/12/12 10:05:45),那么对于日期类型的参数在进行封装的时候,需要通过@DateTimeFormat注解,以及其pattern属性来设置日期的格式。

  • @DateTimeFormat注解的pattern属性中指定了哪种日期格式,前端的日期参数就必须按照指定的格式传递。
  • 后端controller方法中,需要使用Date类型或LocalDateTime类型,来封装传递的参数。
    在这里插入图片描述

JSON参数

  • 传递json格式的参数,在Controller中会使用实体类进行封装。
  • 封装规则:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数。需要使用@RequestBody标识。
    在这里插入图片描述

路径参数

传统的开发中请求参数是放在请求体(POST请求)传递或跟在URL后面通过?key=value的形式传递(GET请求)
在现在的开发中,经常还会直接在请求的URL中传递参数。例如:
http://localhost:8080/user/1
http://localhost:880/user/1/0

  • 前端:通过请求URL直接传递参数
  • 后端:使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP tables防火墙(一)

本章主要介绍: 熟悉Linux防火墙的表,链的结构理解数据包匹配的基本流程学会编写IP tables规则 1.0防火墙基础 在 Internet 中,企业通过架设各种应用系统来为用户提供各种网络服务,如 Web 网站、电子邮件系统、FTP 服务器、数…

eureka注册列表 某服务出现多个服务实例

最近文件导出功能偶发成功,大部分情况都失败,开始以为接口被拦截,gateway服务没有接口调用日志,发现测试环境可以,正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例,调用接口将错误…

【OpenCV】OpenCV:计算机视觉的强大工具库

摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV?二、OpenCV的功…

Spring04

一、AOP的概念 AOP 为 (Aspect Oriented Programming) 的缩写,意为:面向切面编程,底层是使用动态代理的技术实现对目标方法的增强和控制访问等功能。 其中AOP中有几个重要的概念: 1、通知:增强的逻辑,或者后期要加入的代码。 2、目…

介绍混沌工程的主要作用是什么?

混沌工程是一种通过有序的混沌实验来提高系统稳健性和可靠性的实践。它不仅有助于发现问题,更能够促使团队建立起一种主动预防和处理问题的文化,从而为复杂系统的管理提供了全新的视角。本文将介绍混沌工程的主要作用: 发现系统脆弱性&#x…

中国社科院与新加坡新跃社科大联合培养博士——读博就业前景

现在国家高度重视高素质人才的培养,硕士和博士人数增多。很多人想要走学术道路,想要做自己喜欢领域的科研,不过也有很多人希望通过高学历获得更高的薪资待遇。根据一些数据表明我国每年的博士人数都在五万或六万左右。2018年的博士毕业生总人…

MidTool图文创作-GPT-4与DALL·E 3的结合

GPT-4与DALLE 3的结合 GPT-4是由OpenAI开发的最新一代语言预测模型,它在前代模型的基础上进行了大幅度的改进,不仅在文本生成的连贯性、准确性上有了显著提升,还在理解复杂语境和执行多步骤指令方面表现出了更高的能力。而DALLE 3则是一个创…

Mysql的主从复制和读写分离

一.主从复制 主从复制的作用: 读写分离 读写分离 具有高可用性 主从复制的工作过程: 主服务器master发生数据变化时,会记录到二进制日志中;从服务器slave会开启io线程请求二进制日志事件;主服务器会为每个io线程…

QT登录功能开发

登录功能 1选择无按钮的dialog 2登录函数 #include <QApplication> #include <QDialog> #include <QFormLayout> #include <QLineEdit> #include <QPushButton> #include <QMessageBox>class LoginDialog : public QDialog { public:Log…

SpringIOC之support模块ConversionServiceFactoryBean

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

three.js 多通道组合

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div style"border: 1px so…

PASCAL VOC数据集

官方页面&#xff1a; 官方网址&#xff1a; The PASCAL Visual Object Classes Challenge 2012 (VOC2012) (ox.ac.uk) 数据集下载&#xff1a; 类别&#xff1a; 数据集结构&#xff1a;voc2012 test数据集不公开 标注自己的目标检测数据集&#xff1a; Make Sensehttps:…

javafx

JavaFX JavaFX简介 JavaFX是一个用于创建富客户端应用程序的图形用户界面&#xff08;GUI&#xff09;框架。它是Java平台的一部分&#xff0c;从Java 8开始成为Java的标准库。 JavaFX提供了丰富的图形和多媒体功能&#xff0c;使开发人员能够创建具有吸引力和交互性的应用程…

【数据结构】堆的实现及TOP-K问题

文章目录 前言1. 堆的概念及结构2. 堆的实现2.1 堆向上调整算法2.2 堆向下调整算法2.3 堆的创建2.4 堆的删除2.5 堆的常用接口代码实现 3. 堆的应用TOP-K问题 前言 在正式讲堆之前&#xff0c;我们要先来讲一下二叉树的顺序结构&#xff1a; 普通的二叉树是不适合用数组来存储…

认识机器学习【woodwhales.cn】

为了更好的阅读体验&#xff0c;建议移步至笔者的博客阅读&#xff1a;认识机器学习 生活中的问题1&#xff1a;居民家庭生活用气价格 北京燃气小程序在线咨询&#xff0c;查询北京居民家庭生活用气价格 上图价格梯度&#xff0c;可以由文字转换成表格&#xff1a; 第一档用气…

【Matlab】LSTM长短期记忆神经网络时序预测算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88688439 一&#xff0c;概述 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;结构&#xff0c;由于其对于…

UI自动化Selenium 显式和隐式等待Wait

一、问题现象 大家是否自动化执行过程中&#xff0c;出现脚本时而成功时而失败的情况&#xff1b;发现常见情况如下&#xff1a; 1、元素时而出现时而提示不存在&#xff0c;timeout 2、元素时而可以操作时而不能操作&#xff1b;提示&#xff1a;元素不可点击或不可操作 3…

Qdrant向量数据库

Qdrant 是专为扩展过滤支持而设计的向量相似度搜索引擎和向量数据库&#xff0c;这使得它适用于各种基于神经网络的语义匹配、图像搜索等应用。 Qdrant 使用 Rust &#x1f980; 编写&#xff0c;即使在高负载下也能快速、可靠地工作。 Qdrant架构 上图展示了 Qdrant 一些主要…

【排序】堆排序(C语言实现)

文章目录 前言1. 堆排序1.1 堆排序的思想1.2 堆排序的实现 2. 为什么向下调整而不是向上调整 前言 本章主要会讲堆排序的实现过程以及向上调整和向下调整的时间复杂度&#xff0c;在学习本章前&#xff0c;需要对堆、以及向上调整和向下调整有一个了解&#xff0c;如果不了解的…

【CISSP学习笔记】5. 安全架构和工程

该知识领域涉及如下考点&#xff0c;具体内容分布于如下各个子章节&#xff1a; 使用安全设计原理来研究、实施与管理工程过程理解安全模型的基本概念&#xff08;例如 Biba、Star Model、Bell-LaPadula 等模型&#xff09;基于系统安全要求选择控制措施理解信息系统 (IS) 的安…