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

SpringBoot项目中参数获取与响应

1. 程序结构&通信方式

程序结构:

  • C/S : 客户端/服务器端

    -Main方法。

    -效果炫目、数据相对安全。

    -公司成本高,因为要分别开发客户端和服务器端。

  • B/S: 浏览器端/服务器端

    -效果依赖于浏览器、数据相对不如C/S安全(token令牌模式)

    -公司成本低,只需要单独开发服务器端。

资源信息:

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

  • 静态资源:代码不变、效果不变。

    (HTML/CSS/JS/VUE...)

  • 动态资源:效果改变根据代码控制。

    (Java、servlet...)

通信方式:

  • WEB程序:请求和响应模式。

    -浏览器向服务器发信息: 发请求

    -服务器向浏览器发信息:发响应

  • 请求-响应是成对出现的。

    -先有请求,再有响应。

    -必须是 浏览器先向服务器发请求,服务器收到请求后,才能向浏览器发响应。

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

  • 包创建:

  • Java程序(Java类)创建:

新建名为---MyController的class类

在MyController中输入

java 复制代码
@RestController //标记当前Java类,是一个可以和浏览器进行数据交换的控制器
@RequestMapping("/my") //给该控制器设置一个访问路径,该路径是可以在浏览器上进行访问的
public class MyController {

   @RequestMapping("/t1")//给该方法设置一个访问路径,该路径是可以在浏览器上进行访问的
   public String t1(){
       System.out.println("helloWorld!!!");//在控制台打印信息
       return "你好世界!!!";//将信息发给浏览器,让浏览器展示
   }
}

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

问题解释

  1. SpringBoot启动和关闭

    启动:

    关闭:

    任意按下一个小红方块均可关闭SpringBoot项目

    关闭之后,刷新网页,不再出现运行SpringBoot项目时显示的页面

  2. 代码编写的注意事项

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

3. 单参数获取

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

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

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

例如:

java 复制代码
 @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));
   }
java 复制代码
@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));
}
bash 复制代码
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
java 复制代码
@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环境
java 复制代码
	<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
	</dependency>

添加注解

  • 使用入口:
    8080是端口号

    http://localhost:8080/swagger-ui/index.html

  • 使用操作:

    POST请求居多,少量的GET请求

    JavaBean:
    进行数据封装:
    属性名 = 属性值;
    userName = 张三;
    hobbies = 编程,游泳;

创建TestBean1类

java 复制代码
@Data
public class TestBean1 {
   private String name;
   private String sex;
   private String[] hobbies;
}
java 复制代码
@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:

创建出来,封装数据。

java 复制代码
@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){

}
java 复制代码
@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数据接收请求:

    @RequestBody JavaBean javaBean
    @RequestBody Map<String,Object> map

java 复制代码
@RequestMapping("/t9")
public void t9(@RequestBody TestBean1 testBean1){
   System.out.println(testBean1);
   System.out.println(testBean1.getName());
}
java 复制代码
@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>

java 复制代码
@RequestMapping("/t11")
public @ResponseBody TestBean1 t11(){
   TestBean1 tb1 = new TestBean1();
   tb1.setName("小张");
   tb1.setSex("男");
   String[] hobbies = {"编程","游泳"};
   tb1.setHobbies(hobbies);
   return tb1;
}
java 复制代码
@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
相关推荐
今天背单词了吗9802 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师4 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
阿杆6 分钟前
😡同事查日志太慢,我现场教他一套 grep 组合拳!
linux·后端
PetterHillWater7 分钟前
基于Trae智能复杂项目重构实践
后端·aigc
东阳马生架构20 分钟前
订单初版—2.生单链路中的技术问题说明文档
java
凌览20 分钟前
有了 25k Star 的MediaCrawler爬虫库加持,三分钟搞定某红书、某音等平台爬取!
前端·后端·python
这里有鱼汤32 分钟前
给你的DeepSeek装上实时行情,让他帮你炒股
后端·python·mcp
咖啡啡不加糖34 分钟前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南37 分钟前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式