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

本文主要是介绍SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🔥博客主页: 【小扳_-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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic String toString() {return "Hobby{" +"name1='" + name1 + '\'' +", name2='" + name2 + '\'' +'}';}
}

这篇关于SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980406

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]