当前位置: 首页 > 知识库问答 >
问题:

SpringMVC-将对象列表作为具有泛型支持的参数发送时出错

甘英光
2023-03-14

我想将模型数据列表发送到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;
    }
}

控制器方法:

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

运动场.java:

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

    // getter & setter
}

我试图创建一个可重用的通用包装器,这样就避免了为每种类型创建一个包装器。

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;
    }
}

控制器方法:

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:bean类[com.sportslight.entity.ListParamWrap per]的属性“paramList[0]”无效:属性路径“paramList[0]”中的索引超出边界;嵌套异常为java.lang.IndexOutOfBoundsException:索引:0,大小:0

我已经在谷歌上搜索过,当列表有大小时

    < li >问题是由什么引起的?是因为泛型吗?Spring在这种情况下无法正常创建对象? < li >如何避免为每种类型创建包装类?

共有1个答案

尉迟龙光
2023-03-14

错误消息意味着参数列表是空的,即使您认为它的大小为2。

您没有显示实例化包装器的代码,因此,我无法提示为什么它是空的。

 类似资料:
  • 问题内容: 我为缓存编写了一个函数来检索特定对象。这样我就不需要投了。 我正在这样使用 但是现在我的缓存中有一个字符串列表,我不能这样使用 问题是。我对Java非常陌生,我该怎么写? 问题答案: 您无法获得的类,在您的情况下,唯一的方法是:

  • 我正在为我的小型数据科学项目计算线性回归。 当将list(Dictionary.values())传递到我得到的类中时 回溯(最近的调用为last):文件“C://users/paweé/documents/projects vscode/worldbankdatakeras/tests.py”,第41行,在graph.plot_graph_renewable_electricity_status

  • 我有以下java示例类: 它正在生成编译器警告: 类型安全:从捕获#1-of?扩展对象到T的未检查强制转换 我完全可以得到精确的T对象,如果我这样做: 它完全知道这是T型的。 为什么我不能创建该类的新实例?我怎样才能修复它? (我没有查找类型为“Add@SuppressWarnings(“unchecked”)”的响应)

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 问题内容: 我想将HashMap对象作为POST变量发送到ReST资源。我使用该类发送对象。客户端代码: REST资源如下: 我在Tomcat 6.0日志中收到以下异常 我写的客户代码正确吗?还有其他方法可以将HashMap对象作为POST变量发送吗? 问题答案: 只是为了清除一些东西。本是为了用于获得通过的HTTP POST请求提交到您的服务形式参数如参数一般地图。应该这样使用: 但是,当您的客

  • 问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类