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

Spring 将大量对象列表发布到控制器

郭乐意
2023-03-14

我遵循了http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/将对象列表发布到我的Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。

我找到了一个答案,它说在WebDataBinder中设置setAuto就可以解决这个问题。所以在我的控制器中,我这样做了:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(2048);
}

@RequestMapping(value="/upload", method=RequestMethod.POST)
public String postData(Model model){
 
    List<Products> products =   //Some processing to get products list
    ProductList productList = new ProductList();
    productList.setProducts(products);
    System.out.println(“Total records loaded: "+products.size());
    model.addAttribute("productform", productList);
    return “upload”;
}

@RequestMapping(value=“/process”, method=RequestMethod.POST)
public String uploadProcessedData(@ModelAttribute("productform") ProductList productList){
    System.out.println(“Total records received: “+productList.getProducts().size());
    return "upload";
}

我的JSP代码:

<form:form method="post" action="${pageContext.request.contextPath}/process” modelAttribute="productform">
            <table>
                <tr>
                    <th>Record</th>
                    <th>name</th>
                </tr>
                <c:forEach var="product" items="${productform.products}" varStatus="status">
                    <tr>
                        <td><c:out value="${status.index + 1}" /></td>
                        <td><input name="products[${status.index}].name” value="${product.name}”/></td>
                    </tr>
                </c:forEach>
            </table>
            <input type="submit" value="Save" />
</form:form>

然而,我的表单有1000条记录,而控制器只收到556条记录。为什么是这个数字?这是因为尺寸限制吗?我如何让Spring加载所有的1000条记录。

共有1个答案

陶腾
2023-03-14

对于大量数据,您可能希望在表单标记中添加< code > enctype = multipart/form-data ,尤其是在有效负载中包含非ASCII字符的情况下。这可能使得大量数据的发送成为可能。

 类似资料:
  • 问题内容: 我有一个定义了POST处理程序的控制器,如下所示: 以JSON格式查看时,UIVendor对象如下所示: UIVendor bean具有一个ArrayList类型的名为“ Emails”的字段,带有适当的设置器和获取器(getEmails / setEmails)。NotificationEmail对象也具有适当的公共设置器/获取器。 当我尝试使用以下代码发布对象时: 我在日志中收到此

  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t

  • 我的视图中有一个向控制器发送对象的表单,但问题是,如果我发送的对象超过256个,就会出现异常: 所以我在想为什么会有这样的限制,于是我找到了这个话题:https://stackoverflow.com/a/24699008/4173394 但它似乎对我不起作用(可能是我的一个坏习惯)。 下面是我的结构:我的视图名为createUpdate.vm,并像这样发布我的表单: 我在FollowerFile

  • 在集成测试Spring mvc Web应用程序时,有没有办法在模拟请求中传递整个表单对象?我所能找到的就是将每个字段单独作为参数传递,如下所示: 这对于小形状很好。但是如果我发布的对象变大了怎么办?此外,如果我可以发布整个对象,那么测试代码看起来会更好。 具体来说,我想通过复选框测试多个项目的选择,然后发布它们。当然,我可以只测试发布一个项目,但我想知道。。 我们使用的是包含Spring-test

  • 我有一个复选框的集合,每个复选框代表一个“产品”的顶部。我想传递一个修改的产品对象,勾选的浇头存储为selectedToppings。 我已经尝试了下面的代码,但不起作用。问题是我正在传递一个空的“product”对象,并且只存储复选框值(作为“selectedToppings”)。如何将“product”对象与“selectedToppings”一起传递? html(片段): 控制器: 实体:

  • seleccion“对象它是一个实体,具有我从Ajax发送的JSON的一些属性,”seleccionados“是一个列表,保存接收到的数组,但当我发送它时,obj参数总是返回一个空对象,Ajax发送错误函数,我认为问题是我在向对象发送数组,但我不知道如何解决它 选择对象模型: