Spring学习之旅(八)--SpringMVC请求参数
现在我们已经完成了一个无参的接口了,但是应用中有很多需要携带参数的场景,我们来看看 ** SpringMVC** 对它的支持。
参数绑定
SpringMVC 提供了一种绑定机制,通过这个机制可以从请求中提取数据,然后将数据转换为预定义的数据格式,最后映射到一个模型类,从而创建一个对象。该实现机制只需请求参数名称与 Java 类的属性相匹配即可。
SpringMVC 允许以多种方式将客户端的数据传送到** Controller**方法中:
- 查询参数
- 表单参数
- 路径变量
查询参数和表单参数
1.新建 RequestParameterController 类
@Controller
public class RequestParameterController {
@RequestMapping("/requestParameterPage")
public String index(){
return "index";
}
@RequestMapping("/toInt")
public String toInt(int count){
System.out.println("基本数据类型:"+count);
return "index";
}
@RequestMapping("/toInteger")
public String toInteger(Integer integer){
System.out.println("包装数据类型:"+integer);
return "index";
}
@RequestMapping("/toObject")
public String toObject(User item){
System.out.println("自定义数据类型:name:"+item.getUserName()+";age:"+item.getAge());
return "index";
}
@RequestMapping("/toInt2")
public String toInt2(@RequestParam(value = "id")int count){
System.out.println("参数名词不一致基本数据类型:"+count);
return "index";
}
@RequestMapping("/toArray")
public String toArray(String[] id){
System.out.println("数组对象:"+ Arrays.asList(id));
return "index";
}
@RequestMapping("/toDefault")
public String toDefault(@RequestParam(value = "userAge" ,defaultValue = "0",required=false) Integer age){
System.out.println("age:"+ age);
return "index";
}
}
2.新建 index 页面
<html>
<head></head>
<body>
<a href="/test/toInt?count=1">基本数据</a><br>
<a href="/test/toInteger?integer=2">包装数据类型</a><br>
<a href="/test/toObject?userName=marklogzhu&&age=18">自定义数据类型</a><br>
<a href="/test/toInt2?id=1">参数名词不一致基本数据</a><br>
<a href="/test/toArray?id=1&id=2&id=3">数组对象</a><br>
<a href="/test/toDefault?userAge=25">参数名与方法名不一致,通过@RequestParam注解</a><br>
</body>
</html>
3.依次点击,查看控制台输出
数组对象:[1, 2, 3]
基本数据类型:1
包装数据类型:2
自定义数据类型:name:marklogzhu;age:18
参数不一致基本数据类型:1
数组对象:[1, 2, 3]
age:25
路径变量
像上面参数传送方式都需要客户端指定参数名称
/toObject?name=marklogzhu&age=18
但是我们也可以通过请求路径来实现参数传递:
@RequestMapping(value = "/toPath/{index}")
@ResponseBody
public void toPath(@PathVariable("index") String index) {
System.out.println(index);
}
/toPath/999
如果请求参数少并且一定会有值的话,这种方式也是相当简便的。
参数校验
在客户端调用接口的时候,后端通常需要检查一下客户端传递的参数有效性,一般情况下会有一大堆的 IF 代码存在,例如:
@RequestMapping("/toObject")
@ResponseBody
public String toUser(User user) {
if (user == null) {
return "参数有误";
}
if (user.getAge() <= 0) {
return "用户年龄有误";
}
if (StringUtils.isEmpty(user.getName())) {
return "用户姓名有误";
}
return "成功";
}
我们之前提到过 Spring 最根本的使命就是 简化Java开发,自然 SpringMVC 也为我们提供了参数校验的支持以避免这种代码的出现。详情请看 参数校验工具-BeanValidator
Spring学习之旅(八)--SpringMVC请求参数的更多相关文章
- Spring学习之旅(六)--SpringMVC集成
对大多数 Java 开发来说,基于 web 的应用程序是我们主要的关注点. Spring 也提供了对于 web 的支持,基于 MVC 模式的 Spring MVC 能够帮助我们灵活和松耦合的完成 we ...
- Spring学习之旅(九)--SpringMVC高级技术
文件上传 在 Web 应用中,允许用户上传文件是很常见的需求.文件上传通常是采用 multipart 格式,而 DispatcherServlet 并没有任何解析 multipart 请求数据的功能, ...
- Spring学习之旅(七)--SpringMVC视图
在之前的实例中我们只是在 Controller 中返回了 home 字符类型的值,而没有直接生成可以在浏览器中直接渲染的 HTML,这是因为 SpringMVC 将请求处理的逻辑和视图渲染的实现进行了 ...
- Spring学习之旅(十)--MockMvc
在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- SpringMVC请求参数接收总结
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- SpringMVC请求参数接收总结(一)
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- SpringMVC请求参数总结
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- 2.5万字长文简单总结SpringMVC请求参数接收
这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...
随机推荐
- 快速java环境变量配置记录
配置java环境变量就是将java.exe和javac.exe的路径告诉系统,让系统能够找到这两个exe文件,废话不多说,直接开始如何配置环境变量,安装jdk时记住你的安装位置.(配置时必须要的) ...
- python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)
9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...
- libvirt-qemu-TLS加密虚拟机传输实例分析
说明 TLS(Transport Layer Security Protocol),即安全传输层协议,其核心是加密两台计算机之间的通信.libvirt中使用TLS,可以实现libvirt的安全加密.可 ...
- HTML --- <a href=”#”>与 <a href=”javascript:void(0)” 的区别
<a href=”#”>中的“#”其实是锚点的意思,默认为#top,所以当页面比较长的时候,使用这种方式会让页面刷新到页首(页面的最上部) javascript:void(0)其实是一个死 ...
- bootstrap开发响应式网页的常用的一些 类的说明
1.navbar-导航条 1.navbar-fixed-top,让导航条固定显示在页面上部(注意:固定的导航条会遮住代码,解决方案,给body设置padding-top的值[大于或等于]为我们导航条的 ...
- BME200加密网关,在电力与工业应用的加密网关设计与介绍
加密通信网关,顾名思义就是带加密的通信网关终端, 一般业内主是需用到是工业通信关行业的为主的.,BME200加密通信网关,主要电力和工业互联网相关领域开发的一款加密通信网关. 为什么出现加密网关 1 ...
- Pow共识算法
谈到哈希算法,每个程序员都不陌生,但是谈到比特币共识算法PoW,如果没有接触过的技术人员可能觉得应该会很复杂,毕竟全球的比特币节点数量如此庞大,达成共识的算法应该不会很简单.但其实如果你已掌握哈希算法 ...
- 什么是https?http升级为https需要什么?
一.什么是https? https是一种加密传输协议,网站使用https后可以避免敏感信息被第三方获取.https加密协议=SSL / TLS+http协议,也就是说,在传统的http协议上加上SSL ...
- 定制开发kubernetes流程
kubernetes集群三步安装 概述 本文介绍如何对kubernetes进行二次开发,仓库如何管理,git分支如何管理,怎样利用CI去编译与发布以及如何给社区贡献代码等,结合实际例子,望对大家有所帮 ...
- jQuery插件之路(二)——轮播
还记得以前刚接触前端的时候,浏览各大网站,很多都少不了的有个轮播的效果,那个时候自己是一个彻彻底底的小白,想着这些图片滚动起来还真是有意思,是什么让这些图片在一个方向上连续的滚动呢.后来慢慢的接触多了 ...