叙述

利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数。

下面演示 Controller 如何接收以 GET 方式传递过来的参数。

解决方案

参数直接在路径中

假设请求地址是如下这种 RESTful 风格,hangge 这个参数值直接放在路径里面:

http://localhost:8080/hello/hangge
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello/{name}")public String hello(@PathVariable("name") String name) {return "获取到的name是:" + name;}
}

参数跟在 ? 号后面

假设请求地址是如下这种传统方式,参数跟在问号后面:

http://localhost:8080/hello?name=hangge
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return "获取到的name是:" + name;}
}

如果没有传递参数 Controller 将会报错,我们可以使用 required = false 标注参数是非必须的。

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@RequestParam(name = "name", required = false) String name) {return "获取到的name是:" + name;}
}

或者可以指定个默认值,当没有传递参数时自动使用默认值:

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@RequestParam(name = "name", defaultValue = "xxx") String name) {return "获取到的name是:" + name;}
}

使用 map 来接收参数

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;import java.util.Map;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@RequestParam Map<String, Object> params) {return "name:" + params.get("name") + "<br>age:" + params.get("age");}
}

接收一个数组

假设请求地址是如下这种,有多个同名参数:

http://localhost:8080/hello?name=hangge&name=google
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@RequestParam("name") String[] names) {String result = "";for(String name:names){result += name + "<br>";}return result;}
}

使用对象来接收参数

如果一个 get 请求的参数太多,我们构造一个对象来简化参数的接收方式:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(User user) {return "name:" + user.getName() + "<br> age:" + user.getAge();}
}

User 类的定义如下,到时可以直接将多个参数通过 getter、setter 方法注入到对象中去:

public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

如果传递的参数有前缀,且前缀与接收实体类的名称相同,那么参数也是可以正常传递的:

指定参数前缀

如果传递的参数有前缀,且前缀与接收实体类的名称不同相,那么参数无法正常传递:

我们可以结合 @InitBinder 解决这个问题,通过参数预处理来指定使用的前缀为 u

除了在 Controller 里单独定义预处理方法外,我们还可以通过 @ControllerAdvice 结合 @InitBinder 来定义全局的参数预处理方法,方便各个 Controller 使用。具体做法参考我之前的文章:

  • SpringBoot - @ControllerAdvice的使用详解3(请求参数预处理 @InitBinder)
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;@RestController
public class HelloController {@GetMapping("/hello")public String hello(@ModelAttribute("u") User user) {return "name:" + user.getName() + "<br> age:" + user.getAge();}@InitBinder("u")private void initBinder(WebDataBinder binder) {binder.setFieldDefaultPrefix("u.");}
}

构造多个对象来接收参数

如果一个 get 请求的参数分属不同的对象,也可以使用多个对象来接收参数:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@GetMapping("/hello")public String hello(User user, Phone phone) {return "name:" + user.getName() + "<br> age:" + user.getAge()+ "<br> number:" + phone.getNumber();}
}
public class Phone {private String number;public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}
}

SpringBoot 获取 Get 请求参数详解相关推荐

  1. SpringBoot - 获取Get请求参数详解(附样例:非空、默认值、数组、对象)

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.参数直接在路径中 (1)假设 ...

  2. SpringBoot - 获取Get请求参数详解

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.直接在请求路径中 (1).假 ...

  3. postman请求参数详解

    1. Authorization 身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务.当前的一套helpers可以帮助你解决一些 ...

  4. springboot获取URL请求参数的几种方法

    原文地址:http://www.cnblogs.com/xiaoxi/p/5695783.html 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于pos ...

  5. Spring4.0 RestController Rest风格请求参数详解

    Controller, RestController简要说明 1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2.  Co ...

  6. window.location获取url各项参数详解

    window.location方法后还还可以带href,search等参数,下面我们来看看获取url各项参数的办法. URL即:统一资源定位符 (Uniform Resource Locator, U ...

  7. ajax的请求参数详解以及前后台交互详解

    function rejectSub(){//从隐藏域中拿到userIDvar userId = $("input:hidden[name='userId']").val();va ...

  8. Http请求参数详解

    http请求参数之Query String Parameters.Form Data.Request Payload HTTP请求中不同的请求方式和设置不同的Content-Type时,参数传递的方式 ...

  9. ajax获取服务器端数据参数详解

    1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...

最新文章

  1. windows10 oracle自动备份,Windows系统下oracle 自动备份数据库
  2. VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
  3. Eclipse helios 上编写arduino程序并进行烧录
  4. 学习笔记(44):Python实战编程-单击事件
  5. CSS3弹性伸缩布局(一)——box布局
  6. 3.20学习内容,字符串与列表
  7. 使用docker搭建redis主从
  8. SecureCRT无法登录Ubuntu
  9. 【CodeForces - 697D】Puzzles(树形dp,期望dp)
  10. WebSocket教程(一)
  11. 操作系统提供什么服务、如何服务?
  12. 玩转Google开源C++单元测试框架Google Test系列
  13. python字符串操作总结_Python字符串的一些操作方法总结
  14. 一条命通关,这个AI算法玩超级马里奥操作秀翻天丨视频+开源代码
  15. ora-01950:对表空间XXX无权限
  16. mysql 修改字段名 sql,MySQL中使用SQL语句对字段进行重命名
  17. 2022 年需要掌握的 5 种嵌入式技术
  18. 计算机冯诺伊曼体系结构和哈佛体系结构区别和处理器性能评判标准
  19. linux下打开.mpp文件(微软project).
  20. php判断学生姓名,【PHP】百家姓姓名判断

热门文章

  1. 【转】Linux内核大讲堂 (一) 设备驱动的基石驱动模型(1)
  2. 【Qt入门第36篇】 网络(六)UDP
  3. 招银网络软件测试合肥面试题,【招银网络科技面试|面试题】-看准网
  4. 产品设计交付一体化软件,在线设计更便捷
  5. 网络安全的行业黑话 ——攻击篇 之攻击工具
  6. 对最近用于细粒度车辆分类的深度学习架构的系统评估
  7. 一图明白ACHI,SATA之间的关系
  8. 走近酷点KoolPoint,深度挖掘网管软件的设计细节
  9. windows 下实现socket编程_传送文件
  10. jquery隐藏和显示tr标签