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

SpringBoot项目中参数获取与响应

1. 程序结构&通信方式

程序结构:

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

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

资源信息:

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

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

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

通信方式:

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

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

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

  • 包创建:
    11. SpringBoot项目中参数获取与响应_第1张图片
    11. SpringBoot项目中参数获取与响应_第2张图片
  • Java程序(Java类)创建:

新建名为—MyController的class类
11. SpringBoot项目中参数获取与响应_第3张图片
11. SpringBoot项目中参数获取与响应_第4张图片
在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启动和关闭
    启动:
    11. SpringBoot项目中参数获取与响应_第5张图片
    关闭:
    任意按下一个小红方块均可关闭SpringBoot项目
    11. SpringBoot项目中参数获取与响应_第6张图片
    关闭之后,刷新网页,不再出现运行SpringBoot项目时显示的页面
    11. SpringBoot项目中参数获取与响应_第7张图片

  2. 代码编写的注意事项

11. SpringBoot项目中参数获取与响应_第8张图片

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

3. 单参数获取

11. SpringBoot项目中参数获取与响应_第9张图片

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

例如:如果忘记传递sex这个参数,浏览器就会报错
11. SpringBoot项目中参数获取与响应_第10张图片

- 非必须传递参数
@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环境11. SpringBoot项目中参数获取与响应_第11张图片
	<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
	</dependency>

添加注解
11. SpringBoot项目中参数获取与响应_第12张图片

  • 使用入口:
    8080是端口号
http://localhost:8080/swagger-ui/index.html
  • 使用操作:
    11. SpringBoot项目中参数获取与响应_第13张图片
    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 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数据接收请求:
    11. SpringBoot项目中参数获取与响应_第14张图片
@RequestBody JavaBean javaBean
@RequestBody Map 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
@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

你可能感兴趣的:(09一个新的项目,spring,boot,后端,java,学习,编辑器)