java - SpringMVC - 发送对象列表作为具有通用支持的参数时出错

标签 java spring spring-mvc generics

我想将模型数据列表发送到 springMVC。

基本思想是:

  • 创建一个包装器 Java POJO 以包含一个目标 POJO 列表作为一个字段。
  • 然后使用@ModelAttribute获取请求参数。

一个。以下代码运行良好:

HTML 代码: (单个模型的)

<tr>
    <td>id:</td>
    <td><input type="text" id="sportsFieldList[0].id" name="sportsFieldList[0].id" /></td>
</tr>
<tr>
    <td>name:</td>
    <td><input type="text" id="sportsFieldList[0].name" name="sportsFieldList[0].name" /></td>
</tr>
<tr>
    <td>location:</td>
    <td><input type="text" id="sportsFieldList[0].location" name="sportsFieldList[0].location" /></td>
</tr>
<tr>
    <td>description:</td>
    <td><input type="text" id="sportsFieldList[0].description" name="sportsFieldList[0].description" /></td>
</tr>

SportsFieldListWrapper.java:

import java.util.List;

import xxx.SportsField;

public class SportsFieldListWrapper {
    private List<SportsField> sportsFieldList;

    public List<SportsField> getSportsFieldList() {
        return sportsFieldList;
    }

    public void setSportsFieldList(List<SportsField> sportsFieldList) {
        this.sportsFieldList = sportsFieldList;
    }
}

Controller 方法:

public @ResponseBody Map<Object, Object> batchAdd(@ModelAttribute SportsFieldListWrapper sflWrapper) {
}

运动场.java:

// Just a simple POJO
public class SportsField {
    private Long id;
    // more fields

    // getter & setter
}

B.当我尝试使其通用时,它停止工作了。

我试图创建一个可重用的通用版本的包装器,以避免为每种类型创建一个包装器。

ListParamWrapper.java:

import java.util.List;

public class ListParamWrapper<T> {
    private List<T> paramList;

    public List<T> getParamList() {
        return paramList;
    }

    public void setParamList(List<T> paramList) {
        this.paramList = paramList;
    }
}

Controller 方法:

public @ResponseBody Map<Object, Object> batchAdd(@ModelAttribute ListParamWrapper<SportsField> listWrapper) {
}

HTML 代码: (单个模型的)

<tr>
    <td>id:</td>
    <td><input type="text" id="paramList[0].id" name="paramList[0].id" /></td>
</tr>
<tr>
    <td>name:</td>
    <td><input type="text" id="paramList[0].name" name="paramList[0].name" /></td>
</tr>
<tr>
    <td>location:</td>
    <td><input type="text" id="paramList[0].location" name="paramList[0].location" /></td>
</tr>
<tr>
    <td>description:</td>
    <td><input type="text" id="paramList[0].description" name="paramList[0].description" /></td>
</tr>

获取错误:

org.springframework.beans.InvalidPropertyException: Invalid property 'paramList[0]' of bean class [com.sportslight.entity.ListParamWrap per]: Index of out of bounds in property path 'paramList[0]'; nested exception is java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

我已经在 Google 上搜索过,当列表大小 > 256 时,可能会出现类似的错误,但事实并非如此,在测试中列表大小仅为 2。


问题:

  • 是什么导致了这个问题?是泛型的原因吗?在这种情况下,Spring 无法正确创建对象?
  • 如何避免为每种类型创建包装类?

最佳答案

错误信息意味着 paramList 是空的,即使你认为它的大小是 2。

您没有显示实例化 Wrapper 的代码,所以我无法给出为什么它是空的提示。

关于java - SpringMVC - 发送对象列表作为具有通用支持的参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39643996/

相关文章:

java - Spring MVC MongoDB 配置

java - javac如何计算public static final int NaN = 0/0?

java - 使用 Spring/Spring Boot 注册 Bean Validation ValueExtractor

java - JPA + Hibernate + Spring - 父子持久化生成 ID 导致外键错误

java - 使用 Spring MVC 上传文件

java - Spring MVC MongoDB 集成

java - 如何获得此 double 组以进行打印而不会出现错误?

java - Java中用多个子类实现父类方法

java - 如何避免GC暂停?

java - Spring Validation - 如何在我的 Controller 中检索 errors.rejectValue?