现在我们已经完成了一个无参的接口了,但是应用中有很多需要携带参数的场景,我们来看看 ** SpringMVC** 对它的支持。

参数绑定

SpringMVC 提供了一种绑定机制,通过这个机制可以从请求中提取数据,然后将数据转换为预定义的数据格式,最后映射到一个模型类,从而创建一个对象。该实现机制只需请求参数名称与 Java 类的属性相匹配即可。

SpringMVC 允许以多种方式将客户端的数据传送到** Controller**方法中:

  • 查询参数
  • 表单参数
  • 路径变量

查询参数和表单参数

1.新建 RequestParameterController 类

  1. @Controller
  2. public class RequestParameterController {
  3. @RequestMapping("/requestParameterPage")
  4. public String index(){
  5. return "index";
  6. }
  7. @RequestMapping("/toInt")
  8. public String toInt(int count){
  9. System.out.println("基本数据类型:"+count);
  10. return "index";
  11. }
  12. @RequestMapping("/toInteger")
  13. public String toInteger(Integer integer){
  14. System.out.println("包装数据类型:"+integer);
  15. return "index";
  16. }
  17. @RequestMapping("/toObject")
  18. public String toObject(User item){
  19. System.out.println("自定义数据类型:name:"+item.getUserName()+";age:"+item.getAge());
  20. return "index";
  21. }
  22. @RequestMapping("/toInt2")
  23. public String toInt2(@RequestParam(value = "id")int count){
  24. System.out.println("参数名词不一致基本数据类型:"+count);
  25. return "index";
  26. }
  27. @RequestMapping("/toArray")
  28. public String toArray(String[] id){
  29. System.out.println("数组对象:"+ Arrays.asList(id));
  30. return "index";
  31. }
  32. @RequestMapping("/toDefault")
  33. public String toDefault(@RequestParam(value = "userAge" ,defaultValue = "0",required=false) Integer age){
  34. System.out.println("age:"+ age);
  35. return "index";
  36. }
  37. }

2.新建 index 页面

  1. <html>
  2. <head></head>
  3. <body>
  4. <a href="/test/toInt?count=1">基本数据</a><br>
  5. <a href="/test/toInteger?integer=2">包装数据类型</a><br>
  6. <a href="/test/toObject?userName=marklogzhu&&age=18">自定义数据类型</a><br>
  7. <a href="/test/toInt2?id=1">参数名词不一致基本数据</a><br>
  8. <a href="/test/toArray?id=1&id=2&id=3">数组对象</a><br>
  9. <a href="/test/toDefault?userAge=25">参数名与方法名不一致,通过@RequestParam注解</a><br>
  10. </body>
  11. </html>

3.依次点击,查看控制台输出

  1. 数组对象:[1, 2, 3]
  2. 基本数据类型:1
  3. 包装数据类型:2
  4. 自定义数据类型:name:marklogzhu;age:18
  5. 参数不一致基本数据类型:1
  6. 数组对象:[1, 2, 3]
  7. age25

路径变量

像上面参数传送方式都需要客户端指定参数名称

  1. /toObject?name=marklogzhu&age=18

但是我们也可以通过请求路径来实现参数传递:

  1. @RequestMapping(value = "/toPath/{index}")
  2. @ResponseBody
  3. public void toPath(@PathVariable("index") String index) {
  4. System.out.println(index);
  5. }
  1. /toPath/999

如果请求参数少并且一定会有值的话,这种方式也是相当简便的。


参数校验

在客户端调用接口的时候,后端通常需要检查一下客户端传递的参数有效性,一般情况下会有一大堆的 IF 代码存在,例如:

  1. @RequestMapping("/toObject")
  2. @ResponseBody
  3. public String toUser(User user) {
  4. if (user == null) {
  5. return "参数有误";
  6. }
  7. if (user.getAge() <= 0) {
  8. return "用户年龄有误";
  9. }
  10. if (StringUtils.isEmpty(user.getName())) {
  11. return "用户姓名有误";
  12. }
  13. return "成功";
  14. }

我们之前提到过 Spring 最根本的使命就是 简化Java开发,自然 SpringMVC 也为我们提供了参数校验的支持以避免这种代码的出现。详情请看 参数校验工具-BeanValidator

Spring学习之旅(八)--SpringMVC请求参数的更多相关文章

  1. Spring学习之旅(六)--SpringMVC集成

    对大多数 Java 开发来说,基于 web 的应用程序是我们主要的关注点. Spring 也提供了对于 web 的支持,基于 MVC 模式的 Spring MVC 能够帮助我们灵活和松耦合的完成 we ...

  2. Spring学习之旅(九)--SpringMVC高级技术

    文件上传 在 Web 应用中,允许用户上传文件是很常见的需求.文件上传通常是采用 multipart 格式,而 DispatcherServlet 并没有任何解析 multipart 请求数据的功能, ...

  3. Spring学习之旅(七)--SpringMVC视图

    在之前的实例中我们只是在 Controller 中返回了 home 字符类型的值,而没有直接生成可以在浏览器中直接渲染的 HTML,这是因为 SpringMVC 将请求处理的逻辑和视图渲染的实现进行了 ...

  4. Spring学习之旅(十)--MockMvc

    在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...

  5. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  6. SpringMVC请求参数接收总结

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  7. SpringMVC请求参数接收总结(一)

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  8. SpringMVC请求参数总结

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  9. 2.5万字长文简单总结SpringMVC请求参数接收

    这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...

随机推荐

  1. 快速java环境变量配置记录

      配置java环境变量就是将java.exe和javac.exe的路径告诉系统,让系统能够找到这两个exe文件,废话不多说,直接开始如何配置环境变量,安装jdk时记住你的安装位置.(配置时必须要的) ...

  2. python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)

    9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...

  3. libvirt-qemu-TLS加密虚拟机传输实例分析

    说明 TLS(Transport Layer Security Protocol),即安全传输层协议,其核心是加密两台计算机之间的通信.libvirt中使用TLS,可以实现libvirt的安全加密.可 ...

  4. HTML --- <a href=”#”>与 <a href=”javascript:void(0)” 的区别

    <a href=”#”>中的“#”其实是锚点的意思,默认为#top,所以当页面比较长的时候,使用这种方式会让页面刷新到页首(页面的最上部) javascript:void(0)其实是一个死 ...

  5. bootstrap开发响应式网页的常用的一些 类的说明

    1.navbar-导航条 1.navbar-fixed-top,让导航条固定显示在页面上部(注意:固定的导航条会遮住代码,解决方案,给body设置padding-top的值[大于或等于]为我们导航条的 ...

  6. BME200加密网关,在电力与工业应用的加密网关设计与介绍

    加密通信网关,顾名思义就是带加密的通信网关终端,  一般业内主是需用到是工业通信关行业的为主的.,BME200加密通信网关,主要电力和工业互联网相关领域开发的一款加密通信网关. 为什么出现加密网关 1 ...

  7. Pow共识算法

    谈到哈希算法,每个程序员都不陌生,但是谈到比特币共识算法PoW,如果没有接触过的技术人员可能觉得应该会很复杂,毕竟全球的比特币节点数量如此庞大,达成共识的算法应该不会很简单.但其实如果你已掌握哈希算法 ...

  8. 什么是https?http升级为https需要什么?

    一.什么是https? https是一种加密传输协议,网站使用https后可以避免敏感信息被第三方获取.https加密协议=SSL / TLS+http协议,也就是说,在传统的http协议上加上SSL ...

  9. 定制开发kubernetes流程

    kubernetes集群三步安装 概述 本文介绍如何对kubernetes进行二次开发,仓库如何管理,git分支如何管理,怎样利用CI去编译与发布以及如何给社区贡献代码等,结合实际例子,望对大家有所帮 ...

  10. jQuery插件之路(二)——轮播

    还记得以前刚接触前端的时候,浏览各大网站,很多都少不了的有个轮播的效果,那个时候自己是一个彻彻底底的小白,想着这些图片滚动起来还真是有意思,是什么让这些图片在一个方向上连续的滚动呢.后来慢慢的接触多了 ...