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; } @Override public 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") // 单独接收集合数据需要加@RequestParam public 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数据当成是一个对象来接收了;反之,如果传入的参数是键值对方式,用对象加@RequestBody注解来接收,也接收不到。
【方式四】路径参数
路径参数,是指把数据附加在访问的路径后面,数据以“/”间隔。在程序中接收的时候,需要在映射的路径后面给参数设置参数名,并在形参列表中使用@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:接收路径参数时,用于将参数值传分配给形参;
到此这篇关于SpringBoot接收请求参数的四种方式的文章就介绍到这了,更多相关SpringBoot接收请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!