SpringBoot接收请求参数的四种方式总结

 更新时间:2023年09月12日 09:38:01   作者:特立独行的程序员  
这篇文章主要给大家介绍了关于SpringBoot接收请求参数的四种方式,文中通过代码以及图文介绍的非常详细,对大家学习或者使用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接收请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 启动springboot项目时报错:无法访问org.springframework.web.bind.annotation.GetMapping …具有错误的版本 61.0,应为52.0​的解决方案

    启动springboot项目时报错:无法访问org.springframework.web.bind.annotatio

    这篇文章给大家分享了启动springboot项目时报错:​无法访问org.springframework.web.bind.annotation.GetMapping …具有错误的版本 61.0,应为52.0​的解决方案,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 基于Comparator对象集合实现多个条件按照优先级的比较

    基于Comparator对象集合实现多个条件按照优先级的比较

    这篇文章主要介绍了基于Comparator对象集合实现多个条件按照优先级的比较,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 关于spring中单例Bean引用原型Bean产生的问题及解决

    关于spring中单例Bean引用原型Bean产生的问题及解决

    这篇文章主要介绍了关于spring中单例Bean引用原型Bean产生的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java中的泛型详细解析

    Java中的泛型详细解析

    这篇文章主要介绍了Java中的泛型详细解析,泛型又称参数化类型,是JDK5.0出现的新特性,解决了数据类型的安全型问题,Java泛型可以保证如果程序在编译时没用发出警告,运行时就不会产生classCastException异常,需要的朋友可以参考下
    2024-01-01
  • Java中监听器Listener详解

    Java中监听器Listener详解

    Listener是由Java编写的WEB组件,主要完成对内置对象状态的变化 (创建、销毁)和属性的变化进行监听,做进一步的处理,主要对session和application内置对象监听,这篇文章主要介绍了Java中监听器Listener,需要的朋友可以参考下
    2023-08-08
  • 浅谈spring boot 1.5.4 异常控制

    浅谈spring boot 1.5.4 异常控制

    下面小编就为大家带来一篇浅谈spring boot 1.5.4 异常控制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • SpringBoot实现邮件发送功能的姿势分享

    SpringBoot实现邮件发送功能的姿势分享

    我们在日常开发中,经常会碰到email邮件发送的场景,如发送验证码,向客户发送邮件等等,这篇文章主要给大家介绍了关于SpringBoot实现邮件发送的相关资料,需要的朋友可以参考下
    2021-08-08
  • Redis有效时间设置以及时间过期处理操作

    Redis有效时间设置以及时间过期处理操作

    这篇文章主要介绍了Redis有效时间设置以及时间过期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java正则表达式学习之分组与替换

    Java正则表达式学习之分组与替换

    这篇文章主要给大家介绍了关于Java正则表达式学习之分组与替换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java的接口解耦方式

    java的接口解耦方式

    这篇文章主要介绍了java的接口解耦方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论