0


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

文章目录

请求

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

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

后端开发人员无需太过于关注如何传递参数,了解即可,实际开发中以 Postman 测试为主
比如餐厅的厨师,不关注用户是在店里下单还是外卖平台下单,只需要知道如何让接受订单,根据订单做出对应的菜肴就可以了

1. 传递单个参数

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

importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RequestMapping("/param")@RestControllerpublicclassUserController{@RequestMapping("/m1")publicStringmethod1(String name){return"接收到参数:name="+name;}}

可以看到,后端程序正确拿到了

name

参数的值。Spring MVC 会根据方法的参数名,找到对应的参数,赋值给方法 image.png
如果参数不一致,是获取不到参数的,比如请求 URL:
http://127.0.0.1:8080/param/m1?name1=spring ,响应结果:image.png|523


注意事项

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

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

1 . 正常传递参数

http://127.0.0.1:8080/param/m1/int?age=18
浏览器响应情况:image.png|475
通过

Fiddler

观察请求和响应,

HTTP

响应状态码为

200

Content-Type

text/html

image.png


2 . 不传递 age 参数

http://127.0.0.1:8080/param/m1/int
浏览器响应情况:image.png
通过

Fiddler

观察请求和响应,

HTTP

响应状态码为

500

image.png
尝试观察程序的错误日志,并解决问题:image.png
一般看日志堆栈信息的首行,报错信息显示:

int

类型的参数‘

age

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

包装类型可以为

null

,当把类型变成

Integer

之后:image.png|401

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

3 . 传递参数类型不匹配

http://127.0.0.1:8080/param/m1/int?age=abc
image.png|449
通过 Fiddler 观察请求和响应,HTTP 响应状态码为 400image.png


2. 传递多个参数

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

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

3. 传递对象

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

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

Person

对象:

publicclassPerson{privateint id;privateString name;privateString password;publicintgetId(){return id;}publicvoidsetId(int id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetPassword(){return password;}publicvoidsetPassword(String password){this.password = password;}@OverridepublicStringtoString(){return"Person{"+"id="+ id +", name='"+ name +'\''+", password='"+ password +'\''+'}';}}

对象传递代码实现:

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

本文转载自: https://blog.csdn.net/Yeeear/article/details/142726892
版权归原作者 椰椰椰耶 所有, 如有侵权,请联系我们删除。

“【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象”的评论:

还没有评论