SpringBoot接收请求参数的方式

news2024/11/24 10:43:02

【方式一】原始方式

因为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数据当成是一个对象来接收了。

【方式四】路径参数

路径参数,是指把数据附加在访问的路径后面,数据以“/”间隔。在程序中接收的时候,需要在映射的路径后面给参数设置参数名,并在形参列表中使用@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.coloradmin.cn/o/596790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【十二】设计模式~~~行为型模式~~~命令模式(Java)

命令模式-Command Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】 1.1. 模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个&#xf…

是德Keysight N9000A(agilent)N9000B CXA信号分析仪

Keysight N9000A (Agilent) CXA 信号分析仪是一款多功能、低成本的工具,可用于基本信号表征。它可以帮助您在多个层面上加速产品测试和开发;降低成本、吞吐量、设计增强等。通过 CXA 中的 X 系列可扩展性获得基本功能 -并期待更多。 我们无法预测未来&a…

Midjourney绘制插画,绘画重来没有如此之简单 - 第12篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 用…

【Mininet】基础篇:Mininet创建简单网络拓扑及简单网络拓扑脚本编写

大家好,我是文思月! 每文一言:不要假装努力,结果不会陪你演戏! 本篇文章: 使用Mininet创建简单的网络拓扑,并创建网络拓扑脚本。 正文如下: 1. 最小网络拓朴 创建最小的网络拓扑…

c++多态及其多态的原理

目录 多态的定义及实现多态的条件 多态的原理虚函数表动态绑定和静态绑定总结多态原理 单继承和多继承下的虚函数表单继承下的虚函数表(有虚函数覆盖)多继承下的虚函数表(有虚函数覆盖)为什么子类对象赋值给父类对象,也…

耕耘不缀、丰收如期,中药入血组又双叒叕升级了

春去夏来,小满已至,麦浪序曲逐渐拉响,百趣人在中药领域的勤耕不辍也迎来了本年度的第一次丰收。中药入血组作为中药临床应用重磅产品,此次升级可谓“一优化,两提升,三新增”。“一优化”为分析图例优化&…

Python之pyecharts的常见用法1-水球图

Pyecharts是一个基于Echarts的Python可视化库,可以用Python语言轻松地生成各种交互式图表和地图。它支持多种图表类型,包括折线图、柱状图、散点图、饼图、地图等,并且可以通过简单的API调用实现数据可视化。 Pyecharts的优点包括&#xff1a…

Spring Cloud Alibaba 整合Seata 之概念介绍及Seata-server搭建

目录 前言 基础介绍 官方文档 模式分类 角色介绍 Seata Server 部署 - docker-compose 数据库 服务器 docker-compose.yaml nacos配置 启动 前言 Seata 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务…

过零投切开关的安科瑞低压电力电容器设计

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:目前,我们经常使用的电容器投切开关在实际的运行过程中还存在着很多问题,新型的过零投切开关主要利用微电子技术,同时企业对电路的结构等开展了进一步的优化与调整…

真的有必要定义VO,BO,PO,DO,DTO吗?

今天给大家带来一篇关于VO,BO,PO,DO,DTO的文章,阅读完这篇文章之后,希望大家对VO,BO,PO,DO,DTO有自己的见解。 1. 概念 在讲具体的概念之前,我们…

I.MX6ULL_Linux_驱动篇(35) linux并发与竞争

Linux是一个多任务操作系统,存在多个任务共同操作同一段内存或者设备的情况,多个任务或者中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车…

Mybatis插件MyBatisCodeHelperPro使用

目录 MyBatisCodeHelperPro的安装(IDEA插件的两种安装方式) 通过IDEA连接MySQL数据库,方便后续的数据库操作 MyBatisCodeHelperPro的使用 1、新建项目工程测试 2、在pom文件中引入依赖(后面测试需要用到) 3、编写…

使用docker部署 java web项目完整记录

概述:基于java及vue开发的前后端web应用, 整套系统由 一个后端服务一个管理端前端vue一个用户端前端vue项目组, 涉及的中间件及第三方应用有 mysql、redis、nginx, 采用docker方式部署整套系统 一、docker 安装 1、参考文档&…

jira中issue状态的改变触发jenkins job构建

背景:想通过监控jira中 issue状态的变化去触发jenkins job的构建 在jenkins中安装插件:JIRA Trigger plugin. 下载地址:https://plugins.jenkins.io/jira-trigger/ 在Jenkins-> Manage Jenkins -> Configure System -> JIRA Trigg…

UnityVR--EventManager--事件中心2

目录 前言 事件中心的结构 EventManager事件管理器 EventType事件类型 EventListener监听及回调 EventDataBase回调时需要传递的参数 总结 前言 上一篇(事件中心1)中,简单解释了委托、事件、监听者,是用于管理项目运行过程…

深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

多线程-*同步代码块*解决两种线程创建方式的线程安全问题

线程安全问题及解决 当我们使用多个线程访问同一资源(可以是同一个变量、同一个文件、同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题。但是多个线程中对资源有读和写的操作。就容易出现线程安全问题。 举…

PyTorch 深度学习 || 专题三:PyTorch 数据的准备

PyTorch 数据的准备 1. 生成数据的准备工作 import torch import torch.utils.data as Data#准备建模数据 x torch.unsqueeze(torch.linspace(-1, 1, 500), dim1) # 生成列向量 y x.pow(3) # yx^3#设置超参数 batch_size 15 # 分块大小 torch.manual_seed(10) # 设置种子点…

国自然发文:这种行为将永久取消基金申请资格

函评阶段这些行为被基金委禁止 国家自然科学基金委重拳出击打击"打招呼"现象,出台《国家自然科学基金项目评审请托行为禁止清单》,禁止科研人员、依托单位、评审专家和基金委工作人员24种违规行为。 主要内容如下: 一、科研人员禁止清单(7项) 主要包括…

初阶数据结构——二叉树

目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的运用 二叉树概念及结构特殊的二叉树二叉树的性质二叉树的存储结构 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构堆的实现堆的结构:初始化堆:销毁堆:插入数据&#xff…