SpringBoot接收请求参数的方式
作者:mmseoamin日期:2023-12-18

【方式一】原始方式

因为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,查看结果

SpringBoot接收请求参数的方式,在这里插入图片描述,第1张

【方式二】键值对

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;
    }

SpringBoot接收请求参数的方式,在这里插入图片描述,第2张

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();
    }

SpringBoot接收请求参数的方式,在这里插入图片描述,第3张

3、数组/集合数据

(1)数组

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

SpringBoot接收请求参数的方式,在这里插入图片描述,第4张

(2)单独接收集合数据需要加“@RequestParam”注解

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

SpringBoot接收请求参数的方式,在这里插入图片描述,第5张

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();
    }

SpringBoot接收请求参数的方式,在这里插入图片描述,第6张SpringBoot接收请求参数的方式,在这里插入图片描述,第7张

【方式三】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";
    }

SpringBoot接收请求参数的方式,在这里插入图片描述,第8张

控制台打印user对象内容

SpringBoot接收请求参数的方式,在这里插入图片描述,第9张

小结

需要注意以下几点:

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

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

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

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

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

    所以,如果发现页面提交的数据,程序接收不到,需要考虑是不是错误的把页面提交的json数据当成是一个对象来接收了;反之,如果传入的参数是键值对方式,用对象加@RequestBody注解来接收,也接收不到。

    【方式四】路径参数

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

    SpringBoot接收请求参数的方式,在这里插入图片描述,第10张

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

    SpringBoot接收请求参数的方式,在这里插入图片描述,第11张

    总结

    涉及到的Spring注解说明:

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

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

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

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

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

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