最近在做ssm时,使用spring mvc提供的封装参数的方法进行接收时,遇到了一个问题:前台向后台发送ajax请求并且携带很多参数,而后台并没有对应的实体类进行接收处理。如果根据参数去建立对应的实体类,这样就会让后台变得臃肿,冗余,
所以选择用Map接收
首先是前台的代码:
之后就不多举例了,下面代码中的json对象可以是form表单中的参数值,也可以是自己定义的。
//定义json对象
var json = {
"user_name":"admin",
"user_role_id":1
};
//JQuery Ajax请求
$.post("user/queryAllByNameByRole",
json,
function(data){
},
'json'
);
spring框架中有个一个工具类:WebUtils。
里面有一个静态方法:
Map<String, Object> params = WebUtils.getParametersStartingWith(ServletRequest request, String prefix);
这个方法可以将前台的参数以key-value的形式保存为一个Map。
Controller层代码:
queryAllByNameByRole方法的参数可以是HttpServletRequest ,可以是ServletRequest
,
对J2ee熟悉的朋友都知道在 request中有一个美好的方法叫做 request.getParameterMap() 返回一个Map 类型当然这个 Map 中
就 包括了页面上传进来的所有的参数。 但是, 这个request.getParameterMap() 返回的 Map 中还包括有其他的一些东西,
所以我们并不能直接迭代就得到我们全部需要的,因为还会得到我们不需要的,所以。当我们使用
WebUtils.getParametersStartingWith(request, "user_"); 这个方法之后,便可以根据页面上传的值来取。
getParametersStartingWith()方法的第一个参数为request对象;
getParametersStartingWith()方法的第二个参数为String对象,作用:上面例子中,第二个参数为“user_”,表示将前缀为“user_”的参数筛选出来。
键值不带前缀,是去掉前缀的!!!!有疑惑的朋友们可以打断点看看。
Mapper配置文件代码:
总结就不总结了,希望可以帮助到大家,如果有错误,请各位海涵并指正。