【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

简介: 【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

请求

访问不同的路径,就是发送不同的请求。在发送请求时,可能会带一些参数,所以学习 Spring 的请求,主要是学习如何传递参数到后端,以及后端如何接收

传递参数,我们主要是使用浏览器和 Postman 来模拟

后端开发人员无需太过于关注如何传递参数,了解即可,实际开发中以 Postman 测试为主

比如餐厅的厨师,不关注用户是在店里下单还是外卖平台下单,只需要知道如何让接受订单,根据订单做出对应的菜肴就可以了

1. 传递单个参数

接受单个参数,在 Spring MVC 中直接用方法中的参数就可以,比如以下代码:

import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
@RequestMapping("/param")  
@RestController  
public class UserController {  
  
    @RequestMapping("/m1")  
    public String method1(String name) {  
        return "接收到参数:name="+name;  
    }  
}

可以看到,后端程序正确拿到了 name 参数的值。Spring MVC 会根据方法的参数名,找到对应的参数,赋值给方法

如果参数不一致,是获取不到参数的,比如请求 URL:

http://127.0.0.1:8080/param/m1?name1=spring ,响应结果:


注意事项

使用基本类型来接收参数时,参数必须传(除 boolean 类型),否则会报 500 错误;类型不匹配时,会报 400 错误

@RequestMapping("/m1/int")  
public String method1GetInt(int age) {  
    return "接收到参数:age="+age;  
}

1 . 正常传递参数

http://127.0.0.1:8080/param/m1/int?age=18

浏览器响应情况:

通过 Fiddler 观察请求和响应,HTTP 响应状态码为 200Content-Typetext/html


2 . 不传递 age 参数

http://127.0.0.1:8080/param/m1/int

浏览器响应情况:

通过 Fiddler 观察请求和响应,HTTP 响应状态码为 500

尝试观察程序的错误日志,并解决问题:

一般看日志堆栈信息的首行,报错信息显示:

int 类型的参数‘ age ’,虽然为可选的,但由于被声明为基本类型而不能被转换为空值。考虑将其声明为对应基本类型的包装类型

包装类型可以为 null,当把类型变成 Integer 之后:

  • 对于包装类,如果不传对应参数,Spring 接收到的数据则为 null。所以企业开发中,对于参数可能为空的数据,建议使用包装类型

3 . 传递参数类型不匹配

http://127.0.0.1:8080/param/m1/int?age=abc

通过 Fiddler 观察请求和响应,HTTP 响应状态码为 400


2. 传递多个参数

如何接收多个参数呢?

和接收单个参数一样,直接使用方法的参数接收即可。使用多个形参

@RequestMapping("/m2")  
public String method2(String name, String password) {  
    return "接收到参数:name=" + name + ", password=" + password;  
}
  • 可以看到,后端程序正确拿到了 namepassword 参数的值
    当有多个参数的时候,前后端进行参数匹配的时候,是以参数的名称进行匹配的,因此参数的位置是不影响后端获取参数的结果

3. 传递对象

如果参数比较多时,方法声明就需要有很多形参,并且后续每次新增一个参数,也需要修改方法声明。我们不妨把这些参数封装为一个对象。

Spring MVC 也可以自动实现对象参数的赋值,比如 Person 对象:

public class Person {  
    private int id;  
    private String name;  
    private String password;  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password;  
    }  
  
    @Override  
    public String toString() {  
        return "Person{" +  
                "id=" + id +  
                ", name='" + name + '\'' +  
                ", password='" + password + '\'' +  
                '}';  
    }  
}

对象传递代码实现:

@RequestMapping("/m3")  
public Object method3(Person person) {  
    return person.toString();  
}
  • 使用浏览器发送请求并传参:
  • 可以看到,后端程序正确拿到了 Person 对象里面的各个属性的值
    Spring 会根据参数名称自动绑定到对象的各个属性上,如果某个属性未传递,则赋值 null(基本类型则赋值为默认初始值,比如 int 类型的属性,会被复赋值为 0)


相关文章
|
3月前
|
缓存 安全 Java
Spring Get请求 与post请求
本文详细介绍了Spring框架中GET请求和POST请求的区别及应用场景。GET请求用于从服务器获取资源,参数附在URL末尾,适合查看非敏感信息;POST请求用于向服务器提交数据,参数在请求体中传输,适合处理敏感信息。Spring通过`@GetMapping`和`@PostMapping`注解分别处理这两种请求。此外,文章还提供了示例代码,展示了如何在Spring中实现这两种请求的处理。最后,文章总结了推荐使用POST请求的原因,包括更高的安全性、更大的数据传输量、更好的幂等性及灵活性。
Spring Get请求 与post请求
|
19天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
58 2
|
5天前
|
XML 安全 Java
Spring Boot中使用MapStruct进行对象映射
本文介绍如何在Spring Boot项目中使用MapStruct进行对象映射,探讨其性能高效、类型安全及易于集成等优势,并详细说明添加MapStruct依赖的步骤。
|
2月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
59 1
Spring MVC——获取参数和响应
|
2月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
39 1
Spring MVC——项目创建和建立请求连接
|
2月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
47 1
|
2月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
35 2
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
89 2
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
212 2
|
2月前
|
存储 Java 程序员
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解
本文详细讲解了Spring框架中IOC容器如何存储和取出Bean对象,包括五大类注解(@Controller、@Service、@Repository、@Component、@Configuration)和方法注解@Bean的用法,以及DI(依赖注入)的三种注入方式:属性注入、构造方法注入和Setter注入,并分析了它们的优缺点。
39 0
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解