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

news2025/2/28 3:27:38

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=swim
       System.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=swim
   System.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,swim
   System.out.println(userName);
   System.out.println(sex);
   System.out.println(Arrays.toString(hobbies));
}

小结: 传统方式:@RequestParam
	   RESTFul风格:@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+v
   TestBean1 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=swim
   System.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=swim
   System.out.println(map);//{}
   System.out.println(map.get("name"));//null
   System.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

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

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

相关文章

【网络安全 --- 靶场搭建】sqlserver SQL注入靶场搭建(提供资源)

一&#xff0c;资源下载地址 百度网盘资源下载链接&#xff1a; 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.bai…

tcp/ip协议2实现的插图,数据结构2 (9 - 章)

&#xff08;20&#xff09; 20 九章1 IP选项处理 ip_dooptions &#xff08;21&#xff09;

qq视频录制教程,让你的视频更加精彩

“qq视频可以录制吗&#xff1f;浏览qq的时候发现一段有趣的视频&#xff0c;点击下载却一直显示失败&#xff0c;朋友叫我把视频录制下来&#xff0c;但是我不知道怎么操作&#xff0c;想问问大家&#xff0c;有没有办法录制qq的视频。” 在信息化的时代&#xff0c;通过视频…

C# Sqlite数据库的搭建及使用技巧

C# Sqlite数据库的搭建 前言: 今天我们来学一下Sqlite的数据库的搭建&#xff0c;Sqlite数据库不比MySqL数据库&#xff0c;SQlite数据是一个比较轻量级的数据库&#xff0c;SQLite提供了比较多的工具集&#xff0c;对数据基本上不挑&#xff0c;什么数据都可以处理&#xff…

Vue2 +Element UI 表格行合并

如果相邻数据是一致的&#xff0c;则单元格的行合并,指定需要合并的列&#xff0c;下面我是指定合并了分类和类型这两列。 先看效果 Element UI为我们的<el-table>提供了一个属性span-method&#xff1a;合并行或列的计算方法 下面是一个示例: html部分 - 主要是在表上指…

安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中&#xff0c;安装 Umi 脚手架&#xff1a; yarn create umi接下来&#xff0c;安装将要用到的相关依赖 umijs/plugins&#xff1a; npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集&#xff0c;包含了…

在 TensorFlow 中调试

如果调试是消除软件错误的过程&#xff0c;那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中&#xff0c;我想谈谈 TensorFlow 中的调试。 在之前的一些帖子&#xff08;此处、此处和此处&#xff09;中&…

RK3568平台开发系列讲解(驱动篇)Linux自带LED子系统驱动实验

🚀返回专栏总目录 文章目录 一、LED 驱动使能二、 Linux 内核自带 LED 驱动简介2.1、LED 灯驱动框架分析2.2、module_platform_driver 函数简析2.3、gpio_led_probe 函数简析三、设备树节点编写四、测试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们以前都是自…

UE5中双pass解决半透明材质乱序问题

透明度材质乱序问题一直是半透明效果时遇到的比较多的问题&#xff0c;用多pass方案只能说一定程度上解决&#xff0c;当遇到多半透明物体穿插等情况时&#xff0c;仍然不能完美解决。 双pass方案Unity用的比较多&#xff0c;因为Unity支持多个pass绘制。在UE中我们可以以复制多…

【开源】给ChatGLM写个,Java对接的SDK

作者&#xff1a;小傅哥 - 百度搜 小傅哥bugstack 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 清华大学计算机系的超大规模训练模型 ChatGLM-130B 使用效果非常牛&…

【Qt之QTableWidget和QTreeWidget】树悬停、选择样式及表格表头和首行间隔线

QTableWidget设置表头与首行间隔线 win10 实例化QTableWidget后&#xff0c;表格表头和首行中间无间隔线&#xff0c;以下是通过样式表进行设置&#xff1a; // 设置横向表格头的间隔线&#xff0c;可设置四个方向的间隔线,不需要间隔线的可以设置为0px// border-left:0px sol…

同城本地顺风车微信小程序源码系统,前端+后端完整搭建教程

大家好&#xff0c;今天要给大家分享一款同城本地顺风车微信小程序源码系统&#xff0c;同城本地顺风车微信小程序源码系统是一种基于互联网和移动社交平台的顺风车服务系统&#xff0c;搭建起来也十分简单。 系统特色功能一览&#xff1a; 地图定位&#xff1a;用户可以通过地…

C#中的Dispatcher:Invoke与BeginInvoke的使用

Dispatcher是.NET框架中的一个重要概念&#xff0c;用于处理异步消息传递。在C#中&#xff0c;Dispatcher提供了两种方法&#xff1a;Invoke和BeginInvoke&#xff0c;用于控制线程上消息的顺序和执行方式。 目录 一、Dispatcher.Invoke二、Dispatcher.BeginInvoke三、使用场景…

极简c++(4)类的静态成员

静态数据成员 ::是作用域操作符&#xff01; #include<iostream> using namespace std;class Point{private:int x,y;public:point(int x 0,int y 0):x(x),y(y){}~point();int getX(){return x;}int getY(){return x;} }假设需要统计点的个数&#xff0c;考虑添加一个…

Krypton控件组使用之KryptonRibbon

1.去掉File按钮 2.去掉 Cutomize 菜单

安规电容总结

安规电容 顾名思义&#xff1a;电容即使失效后&#xff0c;也不会漏电或者放电伤人&#xff0c;要符合安全规定 多数高压认证产品都需要。 上图&#xff1a; X电容&#xff1a; Y电容&#xff1a; 区别&#xff1a; 电路示意&#xff1a;

安卓配置图标——Qt For Android

前言 相对于给PC端配置图标&#xff0c;给移动端配置有点复杂。 在做跨平台方面&#xff0c;我遵循的原则是能用Qt解决的&#xff0c;就使用Qt的方法&#xff0c;毕竟我对Qt还是很熟悉的。在配置图标方面&#xff0c;界面中所有风格样式都是可以通过qss配置的&#xff1b;平台…

使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在本系列的第三部分中&#xff0c;我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务&#xff0c;这是最常用的 Kubernetes 本地实现之一。虽然这样的本地…

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。

目录 JMS 讲解★ RabbitMQ的核心概念★ RabbitMQ工作机制★ Connection&#xff08;连接&#xff09; 与 Channel&#xff08;通信信道&#xff09;★ Exchange★ Exchange与Queue★ Exchange的类型&#xff08;4种&#xff09;及 该类型对应的路由规则 看RabbitMQ 之前&#x…