【Spring】“哀求“ 之转达单个参数、转达多个参数和转达对象 ...

打印 上一主题 下一主题

主题 600|帖子 600|积分 1800

哀求

访问差别的路径,就是发送差别的哀求。在发送哀求时,大概会带一些参数,以是学习 Spring 的哀求,重要是学习如何转达参数到后端,以及后端如何接收
转达参数,我们重要是使用浏览器和 Postman 来模仿
   后端开发人员无需太过于关注如何转达参数,相识即可,实际开发中以 Postman 测试为主
比如餐厅的厨师,不关注用户是在店里下单还是外卖平台下单,只须要知道如何让担当订单,根据订单做出对应的菜肴就可以了
  1. 转达单个参数

担当单个参数,在 Spring MVC 中直接用方法中的参数就可以,比如以下代码:
  1. import org.springframework.web.bind.annotation.RequestMapping;  
  2. import org.springframework.web.bind.annotation.RestController;  
  3.   
  4. @RequestMapping("/param")  
  5. @RestController  
  6. public class UserController {  
  7.   
  8.     @RequestMapping("/m1")  
  9.     public String method1(String name) {  
  10.         return "接收到参数:name="+name;  
  11.     }  
  12. }
复制代码


  • 咱们使用浏览器发送哀求并传参:
    http://127.0.0.1:8080/param/m1?name=spring

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

如果参数不一致,是获取不到参数的,比如哀求 URL:
http://127.0.0.1:8080/param/m1?name1=spring ,响应效果:


注意事项

使用根本范例来接收参数时,参数必须传(除 boolean 范例),否则会报 500 错误;范例不匹配时,会报 400 错误
  1. @RequestMapping("/m1/int")  
  2. public String method1GetInt(int age) {  
  3.     return "接收到参数:age="+age;  
  4. }
复制代码
1 . 正常转达参数

http://127.0.0.1:8080/param/m1/int?age=18
浏览器响应情况:

通过 Fiddler 观察哀求和响应,HTTP 响应状态码为 200,Content-Type 为 text/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. 转达多个参数

如何接收多个参数呢?
和接收单个参数一样,直接使用方法的参数接收即可。使用多个形参
  1. @RequestMapping("/m2")  
  2. public String method2(String name, String password) {  
  3.     return "接收到参数:name=" + name + ", password=" + password;  
  4. }
复制代码


  • 可以看到,后端程序正确拿到了 name 和 password 参数的值

    当有多个参数的时候,前后端举行参数匹配的时候,是以参数的名称举行匹配的,因此参数的位置是不影响后端获取参数的效果


3. 转达对象

如果参数比较多时,方法声明就须要有很多形参,并且后续每次新增一个参数,也须要修改方法声明。我们不妨把这些参数封装为一个对象。
Spring MVC 也可以自动实现对象参数的赋值,比如 Person 对象:
  1. public class Person {  
  2.     private int id;  
  3.     private String name;  
  4.     private String password;  
  5.   
  6.     public int getId() {  
  7.         return id;  
  8.     }  
  9.   
  10.     public void setId(int id) {  
  11.         this.id = id;  
  12.     }  
  13.   
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.   
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.   
  22.     public String getPassword() {  
  23.         return password;  
  24.     }  
  25.   
  26.     public void setPassword(String password) {  
  27.         this.password = password;  
  28.     }  
  29.   
  30.     @Override  
  31.     public String toString() {  
  32.         return "Person{" +  
  33.                 "id=" + id +  
  34.                 ", name='" + name + '\'' +  
  35.                 ", password='" + password + '\'' +  
  36.                 '}';  
  37.     }  
  38. }
复制代码
对象转达代码实现:
  1. @RequestMapping("/m3")  
  2. public Object method3(Person person) {  
  3.     return person.toString();  
  4. }
复制代码


  • 使用浏览器发送哀求并传参:

  • 可以看到,后端程序正确拿到了 Person 对象里面的各个属性的值
    Spring 会根据参数名称自动绑定到对象的各个属性上,如果某个属性未转达,则赋值 null(根本范例则赋值为默认初始值,比如 int 范例的属性,会被复赋值为 0)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表