Spring MVC(五)--控制器通过注解@RequestParam接受参数
上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上。下面通过实例说明,场景如下:
在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲染到新的视图。所以首先来创建输入参数页面,然后创建控制器,再创建对应的响应视图。
1、创建输入参数页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
String root = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ root + "/";
%>
<script type="text/javascript"
src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
<script type="text/javascript" src="<%=basePath%>js/param.js"></script>
<link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
<title>Insert title here</title>
</head>
<body> <!-- 简单参数传递 -->
<p style="text-align: center;color: red;font-size: x-large;">Spring MVC控制器接受参数方式测试</p>
<div class="param">
<!--使用注解获取参数 -->
<div class="public annotaion">
<p style="text-align: center;">注解法获取</p>
<form id="annoForm" action="<%=basePath%>param/annoParam"
method="post">
<table>
<tr>
<td>id:</td>
<td><input type="text" name="paramId" value=""></td>
</tr>
<tr>
<td>名称:</td>
<td><input type="text" name="paramName" value=""></td>
</tr>
<tr>
<td></td>
<td style="text-align: right;"><input type="submit"
value="提交" id="setAnnoParam"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
页面如下:

2、创建控制器
@Controller
@RequestMapping("/param")
public class ParamController { /**
* 通过注解的方式获取参数
*
* @param paramId
* @param paramName
* @return
*/
@RequestMapping(value = "annoParam", method = RequestMethod.POST)
public ModelAndView getParamByAnno(@RequestParam(value = "paramId", required = false) String id,
@RequestParam("paramName") String name) {
ModelAndView mv = new ModelAndView();
System.out.println(id);
System.out.println(name);
mv.addObject("paramId", id);
mv.addObject("paramName", name);
mv.setViewName("annoParam");
return mv;
}
}
在控制器中,我的参数是id和name,但是前端传过来的是paramId和paramName,这个时候如果直接接受会报错,所以要通过注解进行转化,注解的值就是前端传过来的参数名,可以看到前端页面中的参数名就是paramId和paramName。
注意⚠️:如果参数被注解@RequestParam修饰,默认情况下该参数不能为空,如果为空系统会抛异常,如果允许它为空,还要给注解增加一个required属性,属性值设置为false即可。
上面的控制器获取到参数之后将数据渲染到了视图annoParam中,所以下一步就是创建这个响应视图。
3、创建响应页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Annotatioin Param</title>
</head>
<body> <h2>
获取到的参数id是:<label>${paramId }</label> <br /> 获取到的参数名称是:<label>${paramName }</label>
</h2> </body>
</html>
在该页面获取了控制器渲染的数据。至此,代码完成,下面开始测试。
4、测试
首先在页面输入如下参数:

点击提交之后结果如下:

可以看到渲染成功,说明控制器接受参数成功。
5、总结
注解方式需要注意两点:
1、注解的value属性值为前端传递过来的参数名
2、默认不能为空,如果希望允许为空,必须增加属性required,并设置其值为false
Spring MVC(五)--控制器通过注解@RequestParam接受参数的更多相关文章
- Spring MVC(三)--控制器接受普通请求参数
		Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ... 
- J2EE进阶(十三)Spring MVC常用的那些注解
		Spring MVC常用的那些注解 前言 Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam,@ModelAttribute等等这样 ... 
- Hibernate Validation,Spring mvc 数据验证框架注解
		1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ... 
- Spring MVC(八)--控制器接受简单列表参数
		有些场景下需要向后台传递一个数组,比如批量删除传多个ID的情况,可以使用数组传递,数组中的ID元素为简单类型,即基本类型. 现在我的测试场景是:要从数据库中查询minId<id<maxId ... 
- Spring MVC(四)--控制器接受pojo参数
		以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ... 
- Spring MVC 中的基于注解的 Controller【转】
		原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ... 
- Spring MVC 中的基于注解的 Controller(转载)
		终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法 ... 
- Spring MVC 为控制器添加通知与处理异常
		与Spring AOP一样,Spring MVC也能够给控制器加入通知,它主要涉及4个注解: •@ControllerAdvice,主要作用于类,用以标识全局性的控制器的拦截器,它将应用于对应的控制器 ... 
- Spring MVC (二)注解式开发使用详解
		MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ... 
随机推荐
- 使用雪碧图Css Sprite精灵 | 加速网页响应速度
			什么是CSS Sprite精灵? 是用于前端的一种图片应用技术,通常情况,我们的开发的网页或许有很多张图片,假如在一个页面上有50多张小图片,这意味着浏览器要逐个下载50张图片.Css Sprite它 ... 
- Eclipse指定JDK版本
			Eclipse有好多版本,同时又分32位和64位,要使用相对应的版本和一样位数的JDK,Eclipse才能正常运行. 对应不上时,Eclipse 甚至不能正常启动.报错:“Failed to load ... 
- C++ vector操作--往列表中添加或更新内容
			有个列表,往里面添加内容,如果对象已存在,只更新其属性,否则添加新一项. #include <iostream> #include <string> #include < ... 
- ld.so和ld-linux.so* :动态链接器/加载器(转)
			概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ... 
- sql (5) 左右连接
			左连接 SQL LEFT JOIN LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行.语法SELECT colu ... 
- try install gitlab ce at docker ce
			sudo docker run --detach \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.30:8087/ ... 
- 【JZOJ6375】华灵[蝶妄想]
			description analysis 明显括号序长度是偶数,如果其中一个是奇数,那么只能让这奇数行或列是括号序 对于两个都是偶数,需要分类讨论,假设\(n<m\) 有一种是牺牲掉\(n\ov ... 
- thinkphp 切换数据库
			除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型.用法很简单, 只需要调用Model类的db方法,用法: 常州大理石 ... 
- vs2017 Visual Studio 离线安装方法
			转自:http://www.jb51.net/softjc/539858.html 第一部分:离线下载安装文件 这里描述是包括所有版本,截图以下载VS2017社区版为例: ①登入VS官网下载页面,选择 ... 
- ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决
			ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决 通过终端安装程序sudo apt-get install xxx时出错: E: C ... 
