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 ...
随机推荐
- 快速掌握mongoDB(五)——读写分离的副本集实现和Sharing介绍
1 mongoDB副本集 1 副本集简介 前边我们介绍都是单机MongoDB的使用,在实际开发中很少会用单机MongoDB,因为使用单机会有数据丢失的风险,同时单台服务器无法做到高可用性(即当服务器宕 ...
- tomcat启动成功但是没有监听8080端口
查看tomcat日志 cd tomcat/logs tailf -1000 catlina.out 错误如下: /home/work/jdk/jdk-10.0.1/jre/bin/java: No s ...
- HTTP_4_返回结果的HTTP状态码
状态码:返回请求结果. 状态码种类繁多,以下总结常用的状态码: 类别 信息性状态码 1XX 服务器接受请求,继续处理 成功状态码 200 OK 请求处理成功,并返回资源(响应报文中 ...
- MyBatis在Spring环境下的事务管理
MyBatis的设计思想很简单,可以看做是对JDBC的一次封装,并提供强大的动态SQL映射功能.但是由于它本身也有一些缓存.事务管理等功能,所以实际使用中还是会碰到一些问题--另外,最近接触了JFin ...
- 【pip】brew install pip 问题
Mac 下用 brew install pip 命令安装 pip 时报错: Error: No available formula with the name "pip" Home ...
- 【SVN】SVN Working copy is too old
前天在使用 SVN 客户端 CornerStone 的时候遇到了这个问题,代码不能提交了…… 遇到这个问题的时候怎么办? 解决办法: 找到报错对应的文件夹,里面有个 .svn 的文件夹,去掉再 com ...
- 【iOS】iOS 调试快速定位程序在哪崩溃
iOS 开发过程中经常遇到程序崩溃.快速定位程序在哪崩溃的步骤如下: 1. 2. 3. 这样设置后,程序崩溃时会定位到崩溃的语句,如下: 原文链接:iOS开发何如在调试的时候轻松找到程序在哪里崩溃
- Zookeeper 学习笔记(一)之功能介绍
Zookeeper 主要在以下场景中可以使用 一,命名服务(用到了zookeeper的文件系统) 命名服务是指通过指定的名字来获取资源或者服务的地址,利用zk创建一个全局的路径,提供服务的地址或者一个 ...
- vue-cli3.0创建项目报npm install --loglevel error 踩坑的那把辛酸泪
创建项目 vue create vue-pro 然后如下图 一开始以为是npm的问题,卸载了Mac的node ,安装nvm,然后再安装node (可参考: Mac中nvm的安装和使用 https: ...
- .net持续集成测试篇之Nunit 测试配置
系列目录 在开始之前我们先看一个陷阱 用到的Person类如下 public class Person:IPerson { public string Name { get; set; } publi ...