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 ...
随机推荐
- C#3.0新增功能09 LINQ 基础03 LINQ 和泛型类型
连载目录 [已更新最新开发文章,点击查看详细] LINQ 查询基于 .NET Framework 版本 2.0 中引入的泛型类型. 无需深入了解泛型即可开始编写查询. 但是,可能需要了解 2 个 ...
- [HDOJ] 1172.猜数字
Problem Description 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每 猜一个数,计算机都会告诉玩家猜对几个数 ...
- C# MATLAB混编(二)
在上一篇博客中说到按照参考教程操作之后依然有两个问题. 问题1:当我在matlab中输入mbuild -setup后 报错 解:这是因为VS与Matlab存在版本匹配问题,理论上来说vs版本最好 ...
- linux初学者-数据库管理MariaDB篇
linux初学者-数据库管理MariaDB篇 MariaDB是一种数据库管理系统,是MySQL的一个分支,但是比MySQL更加优秀,可以说是MySQL的替代品.MariaDB使用的是SQL语句.下文将 ...
- django中通过文件和Ajax来上传文件
一.通过form表单来上传文件 1.在html模板中 <form action="/index/" method="post" enctype=" ...
- Unity3D热更新之LuaFramework篇[09]--资源热更新与代码热更新的具体实现
前言 在上一篇文章 Unity3D热更新之LuaFramework篇[08]--热更新原理及热更服务器搭建 中,我介绍了热更新的基本原理,并且着手搭建一台服务器. 本篇就做一个实战练习,真正的来实现热 ...
- +CIMG+彩色图片边缘提取实验记录_canny/hough transfrom
前言: 书到用时方恨少 正文: 边缘提取技术一直都有接触,最通用的莫过于拉普拉斯,sobel几个算子,两个算子都可通过简单的模板运算进行,而现在比较好的一个边缘提取技术是canny,文章中我是用的ca ...
- JDK1.8源码分析01之学习建议(可以延伸其他源码学习)
序言:目前有个计划就是准备看一下源码,来提升自己的技术实力.同时现在好多面试官都喜欢问源码,问你是否读过JDK源码等等? 针对如何阅读源码,也请教了我的老师.下面就先来看看老师的回答,也许会有帮助呢. ...
- 简洁明了的Noip考场策略 / 平时做题也适用
1.选择策略: 评估的标准得分的难度不是AC的难度 2.思考问题: 怀疑的眼光审视自己 3.写代码前: 想想可不可以换一种代码实现会好写很多 把自己的思路再理一遍,可以写到纸上,记下来大致关键顺序 4 ...
- 6、高级的数组的复制(test4.java)
这里指的高级,并不是过么高大上,而是说我们可以调用系统函数,直接对数组进行复制,并且这个函数的强大并不止局限于,对数组的复制,而且可以对数组进行截取,在指定位置插入或删除某个元素. 本篇只介绍数组的复 ...