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

11. SpringBoot项目中参数获取与响应

SpringBoot项目中参数获取与响应

1. 程序结构&通信方式

程序结构:

  • C/S : 客户端/服务器端
    -Main方法。
    -效果炫目、数据相对安全。
    -公司成本高,因为要分别开发客户端和服务器端。

  • B/S: 浏览器端/服务器端
    -效果依赖于浏览器、数据相对不如C/S安全(token令牌模式)
    -公司成本低,只需要单独开发服务器端。

资源信息:

  • 资源:在网上能够访问的一切信息(文字、图片、音乐、视频…)

  • 静态资源:代码不变、效果不变。
    (HTML/CSS/JS/VUE…)

  • 动态资源:效果改变根据代码控制。
    (Java、servlet…)

通信方式:

  • WEB程序:请求和响应模式。
    -浏览器向服务器发信息: 发请求
    -服务器向浏览器发信息:发响应

  • 请求-响应是成对出现的。
    -先有请求,再有响应。
    -必须是 浏览器先向服务器发请求,服务器收到请求后,才能向浏览器发响应。

2. 创建和浏览器交互的控制器-controller

  • 包创建:
    01
    02
  • Java程序(Java类)创建:

新建名为—MyController的class类
03
04
在MyController中输入

@RestController //标记当前Java类,是一个可以和浏览器进行数据交换的控制器
@RequestMapping("/my") //给该控制器设置一个访问路径,该路径是可以在浏览器上进行访问的
public class MyController {@RequestMapping("/t1")//给该方法设置一个访问路径,该路径是可以在浏览器上进行访问的public String t1(){System.out.println("helloWorld!!!");//在控制台打印信息return "你好世界!!!";//将信息发给浏览器,让浏览器展示}
}

程序运行的访问路径:http://localhost:8080/my/t1

问题解释

  1. SpringBoot启动和关闭
    启动:
    05
    关闭:
    任意按下一个小红方块均可关闭SpringBoot项目
    06
    关闭之后,刷新网页,不再出现运行SpringBoot项目时显示的页面
    07

  2. 代码编写的注意事项

08

  1. 如果更新了代码,怎么办?
    先正常关闭服务器,再重新正常启动服务器,代码执行的就是最新代码了。

3. 单参数获取

09

传统风格:
http://主机名:端口/资源?参数列表
例如:http://localhost:8080/my/t1?userName=aa&sex=man&hobbies=code&hobbies=swim
- 必须传递参数
@RequestParam("参数名") 参数类型 参数名

例如:如果忘记传递sex这个参数,浏览器就会报错
09

- 非必须传递参数
@RequestParam(value="参数名",required=false) 参数类型 参数名
设置为非必须传递参数,如果参数正常传递,可以接收,如果参数未传递,返回为null

例如:

 @RequestMapping("/t2")public void t2(@RequestParam("userName")String userName,@RequestParam("sex")String sex,@RequestParam("hobbies")String[] hobbies){//http://localhost:8080/my/t2?userName=aa&sex=man&hobbies=code&hobbies=swimSystem.out.println(userName);System.out.println(sex);System.out.println(Arrays.toString(hobbies));}
@RequestMapping("/t3")
public void t3(@RequestParam("userName")String userName,@RequestParam(value="sex",required = false)String sex,@RequestParam("hobbies")String[] hobbies
){//http://localhost:8080/my/t3/userName=aa&sex=man&hobbies=code&hobbies=swim//http://localhost:8080/my/t3?userName=aa&hobbies=code&hobbies=swimSystem.out.println(userName);System.out.println(sex);System.out.println(Arrays.toString(hobbies));
}
RESTFul风格:
http://主机名:端口/资源/参数列表
例如:http://localhost:8080/my/t1/aa/man/code,swim
@PathVariable("参数名") 参数类型 参数名
@RequestMapping("/资源名/{参数名1}/{参数名2}")例如:http://localhost:8080/my/t1/aa/man/code,swim
@RequestMapping("/t1/{userName}/{sex}/{hobbies}")
@PathVariable("userName") String userName
@RequestMapping("/t4/{userName}/{sex}/{hobbies}")
public void t4(@PathVariable("userName") String userName,@PathVariable("sex")String sex,@PathVariable("hobbies")String[] hobbies
){//http://localhost:8080/my/t4/aa/man/code,swimSystem.out.println(userName);System.out.println(sex);System.out.println(Arrays.toString(hobbies));
}
小结: 传统方式:@RequestParamRESTFul风格:@PathVariable

4. 多参数获取(JavaBean/Map数据)

4.1. Swagger2

postman经典测试工具
Swagger2集成到项目中,比postman更加方便测试工具。
  • 环境搭建:
    在pom.xml中添加maven环境—再点击更新maven环境010
	<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>

添加注解
011

  • 使用入口:
    8080是端口号
http://localhost:8080/swagger-ui/index.html
  • 使用操作:
    012
    POST请求居多,少量的GET请求
JavaBean:
进行数据封装:
属性名 = 属性值;
userName = 张三;
hobbies = 编程,游泳;

创建TestBean1类

@Data
public class TestBean1 {private String name;private String sex;private String[] hobbies;
}
@RequestMapping("/t5")
public void t5(){//ctrl+alt+vTestBean1 tb1 = new TestBean1();tb1.setName("小张");tb1.setSex("男");String[] hobbies = {"编程","游泳"};tb1.setHobbies(hobbies);System.out.println(tb1);//查看所有属性值System.out.println(tb1.getName());//小张
}

Map:
创建出来,封装数据。

@RequestMapping("/t6")
public void t6(){//key:String类型   value:任意类型Map<String, Object> map1 = new HashMap<>();map1.put("name","小张");map1.put("sex","男");String[] hobbies = {"编程","游泳"};map1.put("hobbies",hobbies);System.out.println(map1);//查看所有属性值System.out.println(map1.get("name"));//小张System.out.println(Arrays.toString((Object[]) map1.get("hobbies")));
}

4.2. application/x-www-form-urlencoded格式

Swagger测试同步会导致复选框用hobbies=a1|a2格式,导致服务器解析失败。	
普通数据
接收请求:直接在controller方法参数列表上写 JavaBean或map
格式1:(建议)
public 返回值类型 方法名(JavaBean javaBean){}格式2:(不建议)
public 返回值类型 方法名(Map<String,Object> map){}
@RequestMapping("/t7")
public void t7(TestBean1 testBean1){//http://localhost:8080/my/t7?name=%E5%B0%8F%E5%BC%A0&sex=man&hobbies=code&hobbies=swimSystem.out.println(testBean1);System.out.println(testBean1.getName());
}
@RequestMapping("/t8")
public void t8(Map<String,Object> map){//http://localhost:8080/my/t8?name=%E5%B0%8F%E5%BC%A0&sex=man&hobbies=code&hobbies=swimSystem.out.println(map);//{}System.out.println(map.get("name"));//nullSystem.out.println(Arrays.toString((Object[]) map.get("hobbies")));//null
}

4.3. application/json格式

  • json数据接收请求:
    013
@RequestBody JavaBean javaBean
@RequestBody Map<String,Object> map
@RequestMapping("/t9")
public void t9(@RequestBody TestBean1 testBean1){System.out.println(testBean1);System.out.println(testBean1.getName());
}
@RequestMapping("/t10")
public void t10(@RequestBody Map<String,Object> map){System.out.println(map);//{hobbies=[游泳, 编程], name=小张, sex=男}System.out.println(map.get("name"));//小张
}
小结:如果接收json请求数据,若只是接收并使用一次,用map.如果多个方法中都有接收和使用,用JavaBean
  • json数据发送响应
@ResponseBody JavaBean
@ResponseBody Map<String,Object>
@RequestMapping("/t11")
public @ResponseBody TestBean1 t11(){TestBean1 tb1 = new TestBean1();tb1.setName("小张");tb1.setSex("男");String[] hobbies = {"编程","游泳"};tb1.setHobbies(hobbies);return tb1;
}
@RequestMapping("/t12")
public @ResponseBody Map<String, Object> t12(){Map<String, Object> map1 = new HashMap<>();map1.put("name","小张");map1.put("sex","男");String[] hobbies = {"编程","游泳"};map1.put("hobbies",hobbies);return map1;}
小结:如果发送json响应数据,若只是响应并使用一次,用map.如果多个方法中都有响应和使用,用JavaBean

相关文章:

11. SpringBoot项目中参数获取与响应

SpringBoot项目中参数获取与响应 1. 程序结构&通信方式 程序结构&#xff1a; C/S &#xff1a; 客户端/服务器端 -Main方法。 -效果炫目、数据相对安全。 -公司成本高&#xff0c;因为要分别开发客户端和服务器端。 B/S&#xff1a; 浏览器端/服务器端 -效果依赖于浏览…...

4+1视图与UML

目录 逻辑视图过程视图开发视图物理视图&#xff08;部署视图&#xff09;用例视图 41视图&#xff0c;即逻辑视图&#xff0c;过程视图&#xff0c;实现视图&#xff0c;部署视图&#xff0c;用例视图。 为什么不用一个视图&#xff1f; 针对多个用户&#xff0c;即终端用户&a…...

没用的知识增加了,尝试用文心实现褒义词贬义词快速分类

尝试用文心实现褒义词贬义词快速分类 一、我的需求二、项目环境搭建千帆SDK安装及使用流程 三、项目实现过程创建应用获取签名调用接口计算向量积总结 百度世界大会将于10月17日在北京首钢园举办&#xff0c;今天进入倒计时五天了。通过官方渠道的信息了解到&#xff0c;这次是…...

AWS SAP-C02教程3--网络资源

架构设计中网络也是少不了的一个环节,而AWS有自身的网络结构和网络产品。本章中将带你看看AWS中不同网络产品,以及计算资源、存储资源等产品在网络架构中处于哪个位置,如何才能让它们与互联网互通、与其它产品互通。下图视图将SAP涉及到网络相关组件在一张图表示出来,图中可…...

【TensorFlow2 之012】TF2.0 中的 TF 迁移学习

#012 TensorFlow 2.0 中的 TF 迁移学习 一、说明 在这篇文章中&#xff0c;我们将展示如何在不从头开始构建计算机视觉模型的情况下构建它。迁移学习背后的想法是&#xff0c;在大型数据集上训练的神经网络可以将其知识应用于以前从未见过的数据集。也就是说&#xff0c;为什么…...

mysql面试题46:MySQL中datetime和timestamp的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中DATETIME和TIMESTAMP的区别 在MySQL中,DATETIME和TIMESTAMP是两种用于存储日期和时间的数据类型。虽然它们都可以用于存储日期和时间信息…...

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…...

Navicat定时任务

Navicat定时任务 1、启动Navicat for MySQL工具&#xff0c;连接数据库。 2、查询定时任务选项是否开启 查询命令&#xff1a;SHOW VARIABLES LIKE ‘%event_scheduler%’; ON表示打开&#xff0c;OFF表示关闭。 打开定时任务命令 SET GLOBAL event_scheduler 0; 或者 SET G…...

小白必备:简单几步, 使用Cpolar+Emlog在Ubuntu上搭建个人博客网站

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…...

封装 Token

什么是token? 作为计算机术语&#xff0c;是“令牌”的意思 。 Token 是服务端生成的一串字符串&#xff0c;以作客户端进行请求的一个令牌&#xff0c;当第一次登录后&#xff0c;服务器生成一个Token便将此Token返回给客户端&#xff0c;以后客户端只需带上这个Token前来请…...

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加随机噪声。添加随机噪声的算法原理见:PCL 点云添加均匀分布的随机噪声。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddRandomNoise(); …...

研发必会-异步编程利器之CompletableFuture(含源码 中)

近期热推文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索(含源码) 4、基于Redis实现关注、取关、共同关注及消息推送(含源码) 5…...

上海亚商投顾:沪指高开高走 锂电等新能源赛道大反攻

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日高开后强势震荡&#xff0c;创业板指盘中一度翻绿&#xff0c;随后探底回升再度走高。碳酸锂期货合约…...

力扣第235题 二又搜索树的最近公共祖先 c++

题目 235. 二叉搜索树的最近公共祖先 中等 &#xff08;简单&#xff09; 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&…...

时代风口中的Web3.0基建平台,重新定义Web3.0!

近年来&#xff0c;Web3.0概念的广泛兴起&#xff0c;给加密行业带来了崭新的叙事方式&#xff0c;同时也为加密行业提供了更加具有想象力的应用场景与商业空间&#xff0c;并让越来越多的行业从业者们意识到只有更大众化的市场共性需求才能推动加密市场的持续繁荣。当前围绕这…...

React学习笔记 001

什么是React 1.发送请求获取数据 处理数据&#xff08;过滤、整理格式等&#xff09; 3.操作DOM呈现页面 react 主要是负责第三部 操作dom 处理页面 数据渲染为HTML视图的开源js库。 好处 避免dom繁琐 组件化 提升复用率 特点 声明式编程&#xff1a; 简单 组件化编程…...

2023 | github无法访问或速度慢的问题解决方案

github无法访问或速度慢的问题解决方案 前言: 最近经常遇到github无法访问, 或者访问特别慢的问题, 在搜索了一圈解决方案后, 有些不再有效了, 但是其中有几个还特别好用, 总结一下. 首选方案 直接在github.com的域名上加一个fast > githubfast.com, 访问的是与github完全相…...

unity各种插件集合(自用)

2D Animation——2D序列帧/骨骼动画相关 2D PSD Importer——psb骨骼动画&#xff08;unity官方建议使用psb而非psd&#xff09; &#xff08;Advanced —show preview package 勾选&#xff09;出现 2D IK——反向动力学IK Universal RP——升级项目到Urp&#xff08;通用渲…...

内网收集哈希传递

1.内网收集的前提 获得一个主机权限 补丁提权 可以使用 systeminfo 然后使用python脚本找到缺少的补丁 下载下来 让后使用exp提权 收集信息 路由信息 补丁接口 dns域看一看是不是域控 扫描别的端口 看看有没有内在的web网站 哈希传递 哈希是啥 哈希…...

前端目录笔记

HTML HTML 笔记&#xff1a;初识 HTML&#xff08;HTML文本标签、文本列表、嵌入图片、背景色、网页链接&#xff09;-CSDN博客html 笔记&#xff1a;CSS_UQI-LIUWJ的博客-CSDN博客HTML 笔记 表格_UQI-LIUWJ的博客-CSDN博客 javascript JavaScript 笔记 初识JavaScript&…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...