SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)

news2024/11/21 2:23:26

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 请求响应概述

        1.1 简单参数

        1.2 实体参数

        2.3 数组集合参数

        2.4 日期参数

        2.5 json 参数

        2.6 路径参数

        3.0 完整代码


        1.0 请求响应概述

        当客户端发送不同的请求参数到服务端,服务端就需要进行不同的方法方式来接收请求参数。一般的请求参数的类型包括:简单参数、实体参数、数组集合参数、日期参数、json 参数、路径参数。

        1.1 简单参数

        客户端无论通过 get 或者是 post 方式来发送请求,对应发送简单请求参数来说,是通过键值对的方式来发送到服务端。

        1)方法一:服务端可以用到 HttpServletRequest 类对象来接收简单参数请求,再通过对象名.getParam("请求参数名") 方法来获取值。

代码演示:

    //接收简单参数方法一:使用 HttpServletRequest 类来获取客户端发送过来的请求参数
    //通过对象名.get
    //这里注解为:请求路径
    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        String name = request.getParameter("name");
        String age = request.getParameter("age");

发送的请求参数:

        通过 GET 方式来发送请求,请求参数有两个 name 和 age,send 发送给服务端后,服务端给客户端返回 "OK" 。

服务器输出的结果:

        服务端成功接收请求参数且返回数据到客户端。

        2)方法二:可以直接用一一对应的方式来接收请求参数,必须要注意保持请求的参数名与服务端需要接收的变量名保持一致。

代码演示:

    //接受简单参数方法二:直接用对应请求参数的变量名称来接收,一一对应的方式
    @RequestMapping("/simpleParam1")
    //需要注意的是,参数名称与客户端发送过来的名称要一一对应,且接收后的数据会自动识别转换类型
    public String simpleParam1(String name,Integer age){
        System.out.println(name + " : " + age);
        return "OK";
    }

发送的请求:

        这次发送的请求方式为 post 方式,请求参数在请求体中。

服务器输出的结果:

        3)对方法 2 的升级,万一有需求:接收请求参数的变量名与请求参数不一致,那么可以通过变量名与请求参数进行绑定的形式。

代码演示:

    //如果方法中的参数名与请求参数名不一致,就需要进行绑定参数
    @RequestMapping("/simpleParam2")
    public String simpleParam2(@RequestParam(name = "name" ,required = false) String userName,Integer age){
        System.out.println(userName + " : " + age);
        return "OK";
    }

发送的请求:

        通过用注解 RequestParam 来绑定 name 与 userName ,也可以理解为将 name 映射到 userName 。注解中还有一个参数,该参数的作用,将 required 设置 false 时,不要求请求参数 name 一定有,但是 requider 默认为 true ,必须要求请求参数 name 必须存在。

服务端输出的结果:

        1.2 实体参数

        可以用类对象(实体)的方式来接收请求参数,类中的成员变量必须保持跟请求参数名一致。

代码演示:

public class User {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public User() {
    }

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}
    //接受实体参数方法三:当客户端发送过来的数据,服务端可以用对象来接受,对象中的变量要跟传输过来的参数名要保持一致
    @RequestMapping("/complexParam")
    //用一个类对象来接收
    public String complexParam(User user){
        //这样 user 就可以接收到请求参数了
        System.out.println(user);
        return "OK";
    }

发送的请求:

服务端输出的结果:

        2.3 数组集合参数

        当客户端发送的请求参数中有多个参数名是一致的且值不相同时,服务端就可以用到数组来接收这些相同参数的值了,接收参数值的数组名一定要跟该多个参数名保持一致。

代码演示:

    //接收数组参数方法:当客户端发送的参数名都是一样且值不一样的时候,就可以用到数组来接收了
    //需要注意的是,请求参数名需要跟接收的数组名保持一致
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

发送的请求:

服务端输出的结果:

        服务端成功用数组接收请求参数所应对的值。

        除了数组这个容器之外,还可以用集合容器来接收请求参数,通过注解 @RequestParam 来绑定该集合来接收请求参数。

代码演示:

    //用集合来接收请求参数
    @RequestMapping("/listParam")
    //这里的注解:映射,默认用数组接收,若改变用集合来接收请求参数,就需要进行关系上的绑定
    //一定要注意,请求参数的名称 hobby 一定要与以下方法集合名称保持一致
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

发送的请求:

服务端输出的结果:

        2.4 日期参数

        若客户端发送给服务端的请求参数是日期格式,服务端可以用 LocalDateTime 类型的对象来接收该日期格式的请求参数,由于日期格式是不确定的,所以需要自定义日期格式,通过 @DateTimeFormat 注解中的 pattern 参数来定义日期格式。

代码演示:

    //当客户端的请求参数是日期的格式,那么就需要用到LocalDateTime类型来接收
    @RequestMapping("/dateTimeParam")
    //这里的注释:规定日期格式
    //需要注意,方法中的参数名必须要跟请求参数的名保持一致
    public String dateTimeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){
        System.out.println(localDateTime);
        return "OK";
    }

发送的请求:

        需要注意的是:05 不能只写 5 ,会因为格式不对,导致报错,报错码为:400,客户端格式错误,语法错误。

服务端输出的结果:

        2.5 json 参数

        客户端用 post 方式来发送请求,请求的参数是 json 格式的参数,在请求体中。简单理解为,由于 json 格式与类的格式很像,所以用类对象来接收 json 参数,通过注解 @RequestBody 将类对象与请求 json 格式的参数进行绑定。

代码演示:

    //当客户端的请求参数是一个 json 格式,需要进行参数绑定
    //json 格式的数据可以简单理解认为就是用类对象来接收的,因为格式很相识
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "OK";
    }

发送的请求:

服务端输出的结果:

        这样服务端就完成了对客户端发送过来的 json 格式的请求参数接收完毕,且成功给客户端响应 "OK" 。

        2.6 路径参数

        当客户端发送的路径中就含有参数时,服务端该如何接收呢?

        使用 Spring 框架的 Java 应用程序,可以使用 @PathVariable 注解来接收客户端发送的带有参数的路径。

        在请求路径上的参数需要用 {} 进行封装

代码演示:

    //当客户端的请求参数就是路径参数
    @RequestMapping("/Path/{id}/{name}")
    public String pathParam(@PathVariable String id,@PathVariable String name){
        System.out.println(id + " : " + name);
        return "OK";
    }

发送的请求:

服务端输出的结果:

        3.0 完整代码

demo1 类:

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class demo1 {

    //接收简单参数方法一:使用 HttpServletRequest 类来获取客户端发送过来的请求参数
    //通过对象名.get
    //这里注解为:请求路径
    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        //类型转化:
        int age1 = Integer.parseInt(age);
        System.out.println(name + " : " + age1);

        //给客户端返回
        return "OK";
    }


    //接受简单参数方法二:直接用对应请求参数的变量名称来接收,一一对应的方式
    @RequestMapping("/simpleParam1")
    //需要注意的是,参数名称与客户端发送过来的名称要一一对应,且接收后的数据会自动识别转换类型
    public String simpleParam1(String name,Integer age){
        System.out.println(name + " : " + age);
        return "OK";
    }

    //如果方法中的参数名与请求参数名不一致,就需要进行绑定参数
    @RequestMapping("/simpleParam2")
    public String simpleParam2(@RequestParam(name = "name" ,required = false) String userName,Integer age){
        System.out.println(userName + " : " + age);
        return "OK";
    }



    //接受实体参数方法三:当客户端发送过来的数据,服务端可以用对象来接受,对象中的变量要跟传输过来的参数名要保持一致
    @RequestMapping("/complexParam")
    //用一个类对象来接收
    public String complexParam(User user){
        //这样 user 就可以接收到请求参数了
        System.out.println(user);
        return "OK";
    }


    //接收数组参数方法:当客户端发送的参数名都是一样且值不一样的时候,就可以用到数组来接收了
    //需要注意的是,请求参数名需要跟接收的数组名保持一致
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

    //用集合来接收请求参数
    @RequestMapping("/listParam")
    //这里的注解:映射,默认用数组接收,若改变用集合来接收请求参数,就需要进行关系上的绑定
    //一定要注意,请求参数的名称 hobby 一定要与以下方法集合名称保持一致
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

    //当客户端的请求参数是日期的格式,那么就需要用到LocalDateTime类型来接收
    @RequestMapping("/dateTimeParam")
    //这里的注释:规定日期格式
    //需要注意,方法中的参数名必须要跟请求参数的名保持一致
    public String dateTimeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){
        System.out.println(localDateTime);
        return "OK";
    }


    //当客户端的请求参数是一个 json 格式,需要进行参数绑定
    //json 格式的数据可以简单理解认为就是用类对象来接收的,因为格式很相识
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "OK";
    }


    //当客户端的请求参数就是路径参数
    @RequestMapping("/Path/{id}/{name}")
    public String pathParam(@PathVariable String id,@PathVariable String name){
        System.out.println(id + " : " + name);
        return "OK";
    }



}

User 类:

public class User {
    private String name;
    private String age;
    private Hobby hobby;


    public User() {
    }

    public User(String name, String age, Hobby hobby) {
        this.name = name;
        this.age = age;
        this.hobby = hobby;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Hobby getHobby() {
        return hobby;
    }

    public void setHobby(Hobby hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", hobby=" + hobby +
                '}';
    }
}

Hobby 类:

public class Hobby {
    private String name1;
    private String name2;

    public Hobby() {
    }

    public Hobby(String name1, String name2) {
        this.name1 = name1;
        this.name2 = name2;
    }

    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

    public String getName2() {
        return name2;
    }

    public void setName2(String name2) {
        this.name2 = name2;
    }

    @Override
    public String toString() {
        return "Hobby{" +
                "name1='" + name1 + '\'' +
                ", name2='" + name2 + '\'' +
                '}';
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674948.html

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

相关文章

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品&#xff0c;第一发明人是董事长夫妇&#xff0c;第二发明人是我。 ** 注意** &#xff1a; 内容比较多&#xff0c;还有流程图、界面等。请到 专利指定页面…

30-10y国债利差反转的必要条件

国君宏观表示&#xff0c;30-10y期限利差定价本质上是私人部门主动加杠杆的预期&#xff0c;央行购债与资本市场的正向反馈是可以期待的一种场景&#xff0c;而企业部门的被动加杠杆须以可持续的需求动能与盈利预期作为前提。 要点&#xff1a; 期限利差的本质&#xff1a;对长…

如何压缩图片大小?7个实用软件教你快速压缩图片大小

如何压缩图片大小&#xff1f;7个实用软件教你快速压缩图片大小 以下是七个实用的软件&#xff0c;可以帮助您快速压缩图片大小&#xff1a; 图片编辑助手&#xff1a;这是一款功能强大的图像处理软件&#xff0c;其中包含了图像压缩功能。您可以打开需要压缩的图片&#xf…

手撕C语言题典——环形链表的约瑟夫问题

目录 前言 一.故事背景 二.题目 ​编辑三.思路 1&#xff09;数组 ​编辑2&#xff09; 循环链表 四.代码实现 搭配食用更佳哦~~ 数据结构之单单单——链表-CSDN博客 数据结构之单链表的基本操作-CSDN博客 前面学了单链表的相关知识&#xff0c;我们来尝试做一下关于…

关于nvm管理node版本的一些问题

背景&#xff1a; 基于开发项目的迭代不能做到全部更新&#xff0c;有的项目是vue2.0 有的项目是vue3.0&#xff0c; 那么我们开发的时候就需要对node 进行更新&#xff0c;进而产生因为版本不同导致的错误&#xff1a;由此我们需要一款管理 切换node版本的东西&#xff0c;那就…

全面解析OpenAI的新作——GPT-4o

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…

OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程

北京时间5月14日凌晨&#xff0c;有人说OpenAI一夜改变了历史。 在我们的深夜、太平洋时间的上午 10 点&#xff0c;OpenAI 召开春季发布会&#xff0c;公布了最新的GPT-4o模型&#xff0c;o代表Omnimodel&#xff08;全能模型&#xff09;。20多分钟的演示直播&#xff0c;展…

HTML常见标签-换行标签-水平线标签

换行标签 单纯实现换行的标签是br,如果想添加分隔线,可以使用hr标签 代码 工信部统计显示&#xff0c;截至去年底&#xff0c;我国算力总规模达到180百亿亿次浮点运算/秒&#xff0c;存力总规模超过1000EB&#xff08;1万亿GB&#xff09;。<br>国家枢纽节点间的网络单向…

警惕!红火蚁危机升级:已入侵我国12省份,扩散速度惊人

近年来&#xff0c;红火蚁这一外来入侵物种在我国呈现出了令人担忧的扩张态势&#xff0c;其危害性和扩散速度之迅猛&#xff0c;已引起了社会各界的广泛关注和政府部门的高度警惕。红火蚁作为一种极具破坏力的生物&#xff0c;不仅会对当地的生态环境造成巨大影响&#xff0c;…

AVL树、红黑树

数据结构、算法总述&#xff1a;数据结构/算法 C/C-CSDN博客 AVL树 定义 空二叉树是一个 AVL 树如果 T 是一棵 AVL 树&#xff0c;那么其左右子树也是 AVL 树&#xff0c;并且 &#xff0c;h 是其左右子树的高度树高为 平衡因子&#xff1a;右子树高度 - 左子树高度 创建节点…

棒材直线度测量仪 专为圆形产品研发设计 在线无损检测

棒材直线度测量仪采用了先进的技术&#xff0c;能够实现在线无损检测&#xff0c;为生产过程提供了极大的便利。专为圆形产品设计&#xff0c;它能够精确测量棒材的米直线度及外径、椭圆度尺寸&#xff0c;为质量控制提供可靠的数据支持。 在线直线度测量仪不仅具有出色的性能…

C++实战演练---负载均衡在线oj项目 || 编译服务模块设计

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 前言 上一篇预热文章简单说过我们的编写思路&#xff0c;首先要实现的是编译功能&#xff0c;那么在编译功能版块中&…

好消息|NIH给博士后加薪,起步年薪6.1万美元

近日美国国立卫生研究院&#xff08;NIH&#xff09;正式宣布提高其资助的博士后年薪为61,008美元并根据经验资历进一步向上调整。同时NIH承诺未来3-5年内将博士后的最低年薪提高到70000美元。对于有望从事博士后研究的科研人员而言&#xff0c;这是一个好消息&#xff0c;为此…

水面垃圾监测识别摄像机

随着城市化进程的加快和旅游业的兴起&#xff0c;水域环境污染问题日益突出&#xff0c;水面垃圾成为环境保护的重要问题。为有效监测和清理水面垃圾&#xff0c;水面垃圾监测识别摄像机应运而生。水面垃圾监测识别摄像机利用高清晰度摄像头和智能识别算法&#xff0c;能够实时…

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…

BM11 链表相加(二)

描述 假设链表中每一个节点的值都在 0 - 9 之间&#xff0c;那么链表整体就可以代表一个整数。 给定两个这种链表&#xff0c;请生成代表两个整数相加值的结果链表。 数据范围&#xff1a;0≤&#x1d45b;,&#x1d45a;≤10000000≤n,m≤1000000&#xff0c;链表任意值 0≤…

centos7.9安装PHP运行环境

MySQL安装 报错&#xff1a;源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 解决&#xff1a; yum install mysql-server -y --nogpgcheck 查询初始密码 grep temporary password /var…

SpringBoot实现 QQ邮箱验证码

SpringBoot实现 QQ邮箱验证码 文章目录 SpringBoot实现 QQ邮箱验证码一、开通SMTP校验码1.登录qq邮箱2.开启SMTP服务3.发送手机短信4.得到授权码 二、回到spring项目中1.导入所需依赖2.验证码工具类3.具体实现逻辑(serviceimpl) 三、测试qq邮箱验证码 一、开通SMTP校验码 1.登…

基于Java+SpringBoot+vue+elementui 实现猜灯谜答题抽奖系统

目录 系统简介效果图1、手机答题端2、后台系统管理 源码结构源码下载地址技术交流 博主介绍&#xff1a; 计算机科班人&#xff0c;全栈工程师&#xff0c;掌握C、C#、Java、Python、Android等主流编程语言&#xff0c;同时也熟练掌握mysql、oracle、sqlserver等主流数据库&…

Linux环境变量详解

文章目录 1. 前言2 什么是PATH环境变量3. 如何添加PATH环境变量4. 系统中的其他环境变量5. 环境变量的由来6. 环境变量的基本操作6.1 设置环境变量6.2 通过getenv获取环境变量6.3 环境变量的应用场景 7. 通过命令行参数获取环境变量 1. 前言 本篇文章将以PATH环境变量为例来对整…