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

小扳 2024-06-27 17:33:01 阅读 61

🔥博客主页: 【小扳_-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 + '\'' +

'}';

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。