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

SpringBoot接收请求参数的方式

【方式一】原始方式

因为SpringBoot封装了Servlet,所以也允许使用HttpServletRequest类中的方法来获取

    /*** 【方式一】原始方式*/@RequestMapping("/demo01")public String demo01(HttpServletRequest request) {// 参数名要与页面提交的参数名一致String name = request.getParameter("name");String age_str = request.getParameter("age");// 接收到的数据都是String类型,想要int类型需要类型转换Integer age_int = Integer.parseInt(age_str);return "我叫" + name + ",今年" + age_int;}

使用postman发送:http://localhost:8080/demo01?name=张三&age=30,查看结果
在这里插入图片描述

【方式二】键值对

1、直接使用参数名(或别名)

springboot允许直接使用参数获取,简单优雅;另外,还也可使用“@RequestParam”注解给参数设置别名,这样页面提交的参数名使用别名也能获取到;

	/*** 【方式二】1.直接使用参数名*/@RequestMapping("/demo02")public String demo02(String name, Integer age) {return "我叫" + name + ",今年" + age;}
    /*** 【方式二】1.直接使用别名*/@RequestMapping("/demo02")// 可用@RequestParam给参数设置别名public String demo02(@RequestParam(name="Name")String name, Integer age) {return "我叫" + name + ",今年" + age;}

在这里插入图片描述

2、对象数据

可以创建一个对象,将页面提交的数据封装成一个对象来接收;注意对象的属性名要和页面提交的参数名一致

/*** 人类*/
public class Person {/*** 姓名*/private String name;/*** 年龄*/private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
    /*** 【方式二】2.对象数据*/@RequestMapping("/demo03")public String demo03(Person person) {return "我叫" + person.getName() + ",今年" + person.getAge();}

在这里插入图片描述

3、数组/集合数据

(1)数组

	/*** 【方式二】3.数组数据* @param hobby 数组名*/@RequestMapping("/param04")public String param04(String[] hobby) {return Arrays.toString(hobby);}

在这里插入图片描述
(2)单独接收集合数据需要加“@RequestParam”注解

    /*** 【方式二】3.集合数据* @param hobby 集合名*/@RequestMapping("/demo04")// 单独接收集合数据需要加@RequestParampublic String param04(@RequestParam List hobby) {return hobby.toString();}

在这里插入图片描述

4、日期数据

    /*** 【方式二】4.日期数据* @param time 参数名*/@RequestMapping("/demo05")// 接收日期数据需要加@DateTimeFormat,并设置时间模板public String demo05(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {System.out.println(time.getClass());return time.toString();}

在这里插入图片描述在这里插入图片描述

【方式三】json格式

创建两个javaBean,Address类是User类的一个属性

import com.fasterxml.jackson.annotation.JsonFormat;import java.time.LocalDateTime;
import java.util.List;/*** 用户类*/
public class User {private String username;private String password;private Integer age;private Double score;private Address address;// 时间格式属性要加@JsonFormat注解,并可设置时间模板@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime time;// 集合作为一个javaBean的属性时,不需要加@RequestParam注解private List hobby;/* set()、get()、toString()方法 */}
/*** 联系地址*/
public class Address {private String phone;/* set()、get()、toString()方法 */}
    /*** 【方式三】json数据* @param user 用户类*/@RequestMapping("/demo06")public String demo06(@RequestBody User user){// 打印user对象的内容System.out.println(user);return "success";}

在这里插入图片描述
控制台打印user对象内容
在这里插入图片描述

小结

需要注意以下几点:

(1)接收时间格式的数据,属性要加@JsonFormat注解;

(2)封装json对象数据,形参前面要加@RequestBody,表示将请求的json数据转换成对象接受;

(3)使用postman发送json数据,需要使用post提交方式;因为json数据要放在请求体中,get提交没有请求体;

(4)这种接收方式,需要跟前面的【键值对】接收对象数据的方式区分开。

  • 这种方式提交的json数据,接收时需要加@RequestBody;
  • 前面【键值对】接收对象数据的方式,提交的是键值对数据,接收时不需要加注解。

所以,如果发现页面提交的数据,程序接收不到,需要考虑是不是错误的把页面提交的json数据当成是一个对象来接收了。

【方式四】路径参数

路径参数,是指把数据附加在访问的路径后面,数据以“/”间隔。在程序中接收的时候,需要在映射的路径后面给参数设置参数名,并在形参列表中使用@PathVariable()注解,将参数值传给形参。

在这里插入图片描述

	/*** 【方式四】路径参数*/// 需要在路径后面加{},{}内写别名,表明该位置的参数值传给形参中的哪个变量@RequestMapping("/demo07/{name}/{age}")public String demo07(@PathVariable("name") String name,@PathVariable("age") String age){return "我叫" + name + ",今年" + age;}

在这里插入图片描述

总结

涉及到的Spring注解说明:

@RequestMapping:设置页面访问程序的路径;

@RequestParam:用于给参数设置别名、单独使用集合时;

@DateTimeFormat:用于单独接收时间格式的数据,格式化数据;

@JsonFormat:接收json数据时,用于对象中需要格式化的数据;

@RequestBody:接收json数据时,用于将请求的json数据转换成对象接受;

@PathVariable:接收路径参数时,用于将参数值传分配给形参;

http://www.lryc.cn/news/91058.html

相关文章:

  • MKS SERVO4257D 闭环步进电机_系列5 CAN指令说明
  • 安捷伦E4440A(Agilent) e4440a 3HZ-26.5G频谱分析仪
  • 华为OD机试真题 Java 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路
  • 【iOS】--对象的底层结构
  • 高并发内存池设计_内存池
  • 给编程初学者的一封信
  • 【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)
  • 数据在内存中的存储(超详细讲解)
  • log4cplus使用示例
  • 人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用
  • learnOpenGL-深度测试
  • 阿里云服务器数据盘是什么?系统盘和数据盘区别
  • linux常用命令精选
  • 人体行为足力特征分析及其应用研究_kaic
  • javascript基础二十七:说说 JavaScript 数字精度丢失的问题,解决方案?
  • 重塑工作场所:后疫情时代组织韧性的8个策略
  • TCP协议为什么要三次握手而不是两次?
  • 使用Vuex进行状态管理
  • 【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)
  • IMX6ULL裸机篇之I2C实验-硬件原理图
  • 华为OD机试真题 Java 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路
  • 充分统计量和因子分解定理
  • M1 PD安装arm ubuntu及Docker
  • TCP协议的RST标志
  • 【软件质量与软件测试 白盒测试与黑盒测试】
  • JavaScript教程(高级)
  • C++进阶 —— 范围for(C++11新特性)
  • ELK +Filebeat日志分析系统
  • 万字解析PELT算法!
  • 腾讯云服务器端口怎么全开?教程来了