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