SpringMVC接收list数据

本文介绍了两种在SpringMVC中处理接收封装在JavaBean列表中的数据的方法。一是创建包装类并在方法参数中直接使用,二是将前端list数据转化为JSON,利用Jackson进行解析。推荐使用第二种方式,它提供了更灵活的处理复杂类型数据的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用springmvc时,难免会遇到需要接收一个封装javaBean的list数据,那么如何处理这些数据了?


一:创建于一个包含此list的包装类,在springmvc的方法参数中直接用包装类接收。但是使用包装类也是有限制的,必须说明前台传递的javaBean是包装类中list的元素

jsp中datagrid代码:

field : 'usergysid',
 hidden : true,
 formatter: function(value,row,index){
  return '<input type="hidden" name="lists['+index+'].userid" value="'+row.userid+'" />';
 }

java代码:

public class SysuserCustomVo {
	private List<User> lists;

 
 
public class User{
     private userid;
     private username;

 
 
RequestMapping("/xxxxxxxxx")
public @ResponseBody SubmitResultInfo gysypmladdsubmit(
			HttpSession session,
			String[] indexs,
			SysuserCustomVo customVo)throws Exception


二:这种方式也是我推荐的,将前端的list数据转换成json数据,然后通过jackson解析成List数据


var param=JSON.stringify($('#custom_filt_table').datagrid("getData")); 

后台接收数据:

public String filtop(String json) throws Exception {
		Filtrate filtrate = new Filtrate(); //创建一个实体类接收json分解后的数据
		json = json.replaceAll(""", "\"");   //由于传递的json中有双引号,在springmvc中会自动转译,所以需要全部替换回来
		List<Filtrate> filts = parameter2JavaBean.setJson2List(filtrate, json);
public class parameter2JavaBean {
	public static ObjectMapper  mapper = new ObjectMapper();                                                                    /**
           * 返回泛型 List<T>
           * @throws IOException 
           * @throws JsonMappingException 
           * @throws JsonParseException 
           * 
           */
        public static <T> List<T> setJson2List(T t ,String str) throws JsonParseException, JsonMappingException, IOException{
          Class<?> clazz = t.getClass();
          JavaType javaType = getCollectionType(ArrayList.class, clazz);
          return  mapper.readValue(str,javaType);
    }
    /**
     * 获取泛型的Collection Type
     * 
     * @param collectionClass
     *            泛型的Collection
     * @param elementClasses
     *            元素类
     * @return JavaType Java类型
     * @since 1.0
     */
     public static JavaType getCollectionType(Class<?> collectionClass,
       Class<?>... elementClasses) {
        return mapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
  }


想了解jackson的可以看看:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html


如何转换复杂类型的:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024993.html






### SpringMVC 接收请求参数的数据绑定机制 #### 1. 数据绑定的概念 SpringMVC数据绑定是指将 HTTP 请求中的参数自动映射到控制器方法的参数上。这一过程的核心在于解析 `key=value` 形式的请求参数,并将其转换为目标类型的对象[^2]。 #### 2. 绑定机制 当客户端发送请求时,SpringMVC 会根据请求参数的名字与控制器方法参数名字的一致性来完成绑定操作。如果两者匹配,则会尝试将请求参数值赋给对应的控制器方法参数[^3]。例如: ```java @RequestMapping("/findAccount") public String findAccount(@RequestParam("accountId") int accountId) { System.out.println("AccountId: " + accountId); return "success"; } ``` 上述代码中,`@RequestParam` 注解用于显式指定请求参数名与方法参数之间的对应关系[^4]。 #### 3. 支持的数据类型 SpringMVC 支持多种数据类型的绑定,主要包括以下几类: - **基本数据类型和字符串** 对于简单的 GET 或 POST 请求,可以直接传递基础数据类型(如 `int`, `double`, `String` 等),并由框架自动完成类型转换。 - **实体类型(JavaBean)** 如果表单字段与 JavaBean 属性一致,SpringMVC 可以直接将这些字段封装成一个完整的对象实例。例如: ```java @RequestMapping("/saveAccount") public String saveAccount(Account account) { System.out.println(account.toString()); return "redirect:/success.jsp"; } ``` 这里假设 `Account` 是一个包含多个属性的标准 Java 类型,其字段需提供 getter 和 setter 方法以便框架访问。 - **集合数据类型(List, Map 等)** 集合形式的支持允许更复杂结构化数据传输。比如数组或者列表可以通过索引方式传入,而键值对则适合用 map 来表示。 #### 4. 使用要求 为了确保成功实现参数绑定,需要注意以下几个方面: - 提交表单时定义的 name 属性应同处理器函数形参保持一致; - 若存在嵌套对象情况,那么路径表达式应当反映实际层次关系; - 当遇到自定义日期格式等问题时可以考虑注册 Converter 转换器服务[^1]。 #### 5. 解决乱码问题 对于中文字符可能出现编码错误的情况,在配置文件里设置统一字符集过滤器能够有效预防此类现象发生。通常是在 web.xml 文件加入如下片段即可生效: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` ### 示例代码展示 下面是一个综合性的例子展示了不同种类参数是如何被处理的: ```java @Controller @RequestMapping("/example") public class ExampleController { // 基础数据类型 @RequestMapping(value="/add", method=RequestMethod.GET) public ModelAndView addNumbers(int num1, double num2){ ... } // 实体对象 @RequestMapping(value="/createUser", method=RequestMethod.POST) public String createUser(User user){ ... } // List 集合 @RequestMapping(value="/processLists", method=RequestMethod.POST) public void processLists(List<String> items){ ... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值