Spring MVC(八)--控制器接受简单列表参数

时间:2021-12-05 04:37:59

有些场景下需要向后台传递一个数组,比如批量删除传多个ID的情况,可以使用数组传递,数组中的ID元素为简单类型,即基本类型。

现在我的测试场景是:要从数据库中查询minId<id<maxId且id!=noId的数据,所以我需要向后台传递的参数有minId、maxId、noId,这三参数通过数组传递到后台,步骤如下:

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>
<div class="param">
<!--使用列表传递参数:列表元素为基本类型 -->
<div class="public baseList">
<p style="text-align: center;">列表方式传递参数(基本类型)</p>
<div id="baseListForm">
<input type="button" value="测试" id="setBaseListParam">
</div>
</div>
</body>
</html>

页面效果如下:

Spring MVC(八)--控制器接受简单列表参数

2、给提交按钮绑定请求事件

$(function() {
/* 列表方式传递数据:列表元素为基本类型 */
var idList = [ 3, 13, 5 ];
$("#setBaseListParam").click(function() {
$.ajax({
url : "./baseListParam",
type : "POST",
/* 此处需要定义传递参数的类型为json */
contentType : "application/json",
/* 将json转化为字符串 */
data : JSON.stringify(idList),

success : function(data) {
var size = data.paramList.length;
var html = "<label>总数:" + size + "</label>";
$(".baseList").append(html);
}
});
});
});

上述代码中红色加粗的部分:

  • 定义一个参数数组,分别是minID、maxId和noId,一般都会在页面选择,我是为了方便直接写死来模拟;
  • 需要定义参数类型为JSON;
  • 向后台发送请求时JSON要转化成字符串;

最后在获取成功后我在这个页面显示了查询条数,测试时和数据库中的数据进行对比。

3、创建控制器controller

/*
* 测试Spring MVC中传递参数的方式
*/ @Controller
@RequestMapping("/param")
public class ParamController { @Autowired
@Qualifier("paramService")
ParamService paramService = null; /**
* 获取列表数据:列表元素为基本类型
*
* @param idList
* @return
*/
@RequestMapping(value = "baseListParam")
public ModelAndView getParamByBaseList(@RequestBody List<Integer> idList) {
ModelAndView mv = new ModelAndView();
Map<String, Integer> paramMap = new HashMap<String, Integer>();
paramMap.put("minId", idList.get(0));
paramMap.put("maxId", idList.get(1));
paramMap.put("noId", idList.get(2));
List<Param> paramList = paramService.getParamById(paramMap);
mv.addObject(paramList);
mv.setView(new MappingJackson2JsonView());
return mv;
}
}

注意上面代码中红色加粗的部分:

  • 列表类型的参数还是使用注解@RequestBody接受,参数名称需和前端的名称保持一致;
  • 数据库操作,根据参数从数据库查询;
  • 查询结果渲染到JSON视图中;

因为进行了数据库操作,并且调用了service层,所以下面先创建Service层。

4、创建Service层

采用面向接口方式,先创建接口,然后创建实现类

1⃣️创建service接口

public interface ParamService {

    /**
* 分页查询数据
*
* @param pageParam
* @return
*/
public List<Param> getParam(PageParam pageParam); /**
* 根据ID查询(大于min小于max不等于no)
* @param paramMap
* @return
*/
public List<Param> getParamById(Map<String,Integer> paramMap);
}

里面的第一个方式是通过json方式例子中的service,不过在json例子的那篇文章中没有贴出来。

2⃣️创建service实现类


@Service("paramService")
public class ParamServiceImpl implements ParamService { @Autowired
ParamMapper paramMapper
= null; @Override
public List<Param> getParam(PageParam pageParam) {
return paramMapper.getParamByPaging(pageParam);
} @Override
public List<Param> getParamById(Map<String, Integer> paramMap) {
return paramMapper.getParamById(paramMap);
} }

上面代码中红色加粗部分:

  • 使用@service注解,并定义了一个名称,这样就可以在controller中自动注入了;
  • 自动注入mapper,所以映射器的接口中需要使用注解@Repository;

所以下一步就是创建DAO层进行数据库操作,其实也就是创建MyBatis映射器。

5、创建映射器

1⃣️创建接口

@Repository
public interface ParamMapper { List<Param> getParamByPaging(PageParam pp); List<Param> getParamById(Map<String, Integer> paramMap);
}

其中第二个函数方法是有效方法,第一个是json方式传递中的,可以看出向XML传参数的时候使用的是map类型。

2⃣️创建XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mvc.dao.ParamMapper">
<resultMap id="BaseResultMap" type="com.mvc.pojo.Param">
<id column="param_id" jdbcType="INTEGER" property="paramId" />
<result column="param_name" jdbcType="VARCHAR" property="paramName" />
<result column="param_desc" jdbcType="VARCHAR" property="paramDesc" />
<result column="pram_time" jdbcType="VARCHAR" property="pramTime" />
</resultMap> <select id="getParamByPaging" parameterType="com.mvc.pojo.PageParam"
resultMap="BaseResultMap">
SELECT * FROM param
WHERE param_id >
#{paramId,jdbcType=INTEGER}
AND param_name like
concat('%',#{paramName,jdbcType=VARCHAR},'%')
LIMIT
#{page.limit,jdbcType=INTEGER}
OFFSET
#{page.start,jdbcType=INTEGER}
</select> <select id="getParamById" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT * FROM param WHERE param_id &gt; #{minId,jdbcType=INTEGER} AND param_id &lt; #{maxId,jdbcType=INTEGER} AND param_id != #{noId,jdbcType=INTEGER}
</select>
</mapper>

注意getParamById方法,其中的>和< 号分别用&gt;和&lt;代替,否则会报错,因为会把它们当成标签起始和结尾符处理。

至此就完成了所有代码,下面进行测试。

6、测试

在页面点击提交按钮,请求参数及响应结果如下:

Spring MVC(八)--控制器接受简单列表参数

可以看到查询出了8条数据,现在在数据库执行看看是否也是8条数据,结果如下:

Spring MVC(八)--控制器接受简单列表参数

可以看到查询结果也是8条,所以说明控制器接受参数成功。

7、总结

使用这种方式传递参数的时候,除了参数类型是List之外,其他的都跟JSON一致,前端需要定义参数格式为JSON,并且将JSON数据转化成字符串传给后台。

Spring MVC(八)--控制器接受简单列表参数的更多相关文章

  1. Spring MVC&lpar;九&rpar;--控制器接受对象列表参数

    前一篇文章介绍是传递一个参数列表,列表中的元素为基本类型,其实有时候需要传递多个同一类型的对象,测试也可以使用列表,只是列表中的元素为对象类型. 我模拟的场景是:通过页面按钮触发传递参数的请求,为了简 ...

  2. Spring MVC&lpar;三&rpar;--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  3. Spring MVC&lpar;四&rpar;--控制器接受pojo参数

    以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...

  4. Spring MVC如何获取请求中的参数

    目录 一.获取URL中路径参数 1.1 @PathVariable 注解 1.2 @PathParam 注解 二.获取请求参数: 2.1 GET请求 2.1.1 获取请求中的单个参数:@Request ...

  5. 使用Spring mvc接收整个url地址及参数时注意事项

    使用Spring mvc接收整个url地址及参数时注意事项:url= http://baidu?oid=9525c1f2b2cd45019b30a37bead6ebbb&td=2015-08- ...

  6. Spring MVC&lpar;五&rpar;--控制器通过注解&commat;RequestParam接受参数

    上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...

  7. 前台ajax传参数,后台spring mvc用对象接受

    第二种方法:利用spring mvc的机制,调用对象的get方法,要求对象的属性名和传的参数名字一致(有兴趣的同学看 springmvc源码) 1.将参数名直接写成对象的属性名 $.ajax({ ur ...

  8. spring mvc底层&lpar;DispacherServlet&rpar;的简单实现

    使用过spring mvc的小伙伴都知道,mvc在使用的时候,我们只需要在controller上注解上@controller跟@requestMapping(“URL”),当我们访问对应的路径的时候, ...

  9. 【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上&commat;RequestBody&comma;接收到&lbrace;&quot&semi;uid&quot&semi;&colon;&quot&semi;品牌分类大”&rcub;,加上&commat;RequestParam报错 ---- GET方式接收单个参数的方法

    spring mvc POST方式 接收单个参数,不加任何注解,参数名对应,接收到的值为null spring mvc POST方式 接收单个参数,加上@RequestBody,接收到参数格式:{&q ...

随机推荐

  1. java闭包

    闭包就是在一个外部类A中声明了一个内部类B,然后这个内部类可以访问他自己B的作用域和外部类A的作用域.然后现在用另外一个类C创建了一个内部类B,那么这个内部类B可以访问C的作用域. 如果没有闭包,那B ...

  2. css 文字与小图标对齐

    .icon { display: inline-block; width:20px; height:20px; background: url(delete.png) no-repeat center ...

  3. JavaScript Math 对象

    JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...

  4. Creating Dynamic LOV in Oracle D2k Forms

    Dynamic Lov is a good idea for the form where too many Lov requirement is there with different recor ...

  5. react 资源汇总

    前端变化虽快,但其实一直都围绕这几个概念在转: URL - 访问什么页面 Data - 显示什么信息 View - 页面长成什么样 Action - 对页面做了什么操作 API Server - Da ...

  6. ASP&period;NET中常用方法

    身份证号检测: /// <summary> /// 检验身份证号是否正确 /// </summary> /// <param name="Id"&gt ...

  7. PL&sol;SQL developer 管理多套数据库

    PL/SQL developer 管理多套数据库,作为一个统一的接口平台,连接多套数据库. 1.. 1.类SQL PLUS窗口:File->New->Command Window,这个类似 ...

  8. Kube-DNS搭建(1&period;4版本)

    目录贴:Kubernetes学习系列 1.介绍 之前介绍过DNS的搭建(基于Kubernetes集群部署skyDNS服务),但那个版本的DNS是随着Kubernetes1.2发布出来的,有点原始.本文 ...

  9. 1、Nginx集群tomcat

    一.准备工作 下载nginx,http://nginx.org/,本文采用nginx-1.8.0,下载之后直接解压,免安装 下载tomcat,以配置3台tomcat服务器做负载均衡为例 二.修改tom ...

  10. 2017年UX设计流行的六大趋势

    UX设计在接下来的2017年会有怎样的发展趋势呢?让我们一起回顾去年用户体验设计领域中的变化,来展望新一年用户体验设计的发展趋势吧. 1. 原型制作的爆炸性增长   随着用户体验设计师和用户界面设计师 ...