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 ...
随机推荐
- 给自己的网站加上HTTPS
前言 现在谷歌等厂商大力推行https协议,如果你的网站不支持https,在使用谷歌浏览器时,会被警告网站不安全.w(゚Д゚)w,不安全?哪里不安全了?OK,那我改成支持https好吧.关于http怎 ...
- iOS程序员如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核 ...
- asn1学习笔记
INTEGER 类型 1.由于这个类型在解码器中没有针对取值范围进行定义.所以在定义的时候要指定取值范围.如: errorcode::=ERRORCODE (1..12345678) ErrorCod ...
- vue使用video.js解决m3u8视频播放格式
今天被这个关于m3u8视频播放不了搞了一下午,这个项目所有的视频流都是m3u8格式的,后台给我们返回的都是m3u8格式的视频流,解决了好长时间,看了好多博客,只有这个博客给我点启发,去解决这个问题,请 ...
- python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法
python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法 只需要在file -----settings------file and ...
- markdown常用方法
Markdown格式的普及流行要归功于Github和StackOverflow的流行,随着它们越来越流行,它们支持的Markdown格式也越来越流行. 1.优点 1.Markdown通过内容和样式相分 ...
- macvtap使用教程
kubernetes一键安装 macvtap是虚拟机网络虚拟化常用的一种技术,当然容器也可以用. MACVTAP 的实现基于传统的 MACVLAN. 和 TAP 设备一样,每一个 MACVTAP 设备 ...
- 【iOS】Masonry 自动布局 MASViewConstraint.m:207 错误
问题详情: Assertion failure 报错原因: make.right.equalTo([_imageView superview]).right.with.offset(-); make. ...
- [Hei.Captcha] Asp.Net Core 跨平台验证码实现
写在前面 说起来比较丢脸.我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复 ...
- PID算法资料【视频+PDF介绍】
最近一直有网友看到我的博客后,加我好友,问我能不能给发一些PID的资料,今天找了一些资料放到百度网盘上,给大家下载: 视频资料 链接:https://pan.baidu.com/s/12_IlLgBI ...