java.lang.IndexOutOfBoundsException: Index: 256, Size: 256

出现的场景是: 前端 提交一个form 里面包含 一个list里面的对象有 427 个

[img]http://dl2.iteye.com/upload/attachment/0127/0758/83ce0ddb-8efb-3cf0-8865-d14a18b8937f.png[/img]

注意其中的一个类 DataBinder.java:859

进入后看到
public static final int DEFAULT_AUTO_GROW_COLLECTION_LIMIT = 256;

*/
public class DataBinder implements PropertyEditorRegistry, TypeConverter {

/** Default object name used for binding: "target" */
public static final String DEFAULT_OBJECT_NAME = "target";

/** Default limit for array and collection growing: 256 */
public static final int DEFAULT_AUTO_GROW_COLLECTION_LIMIT = 256;


/**
* We'll create a lot of DataBinder instances: Let's use a static logger.
*/
protected static final Log logger = LogFactory.getLog(DataBinder.class);

private static Class<?> javaUtilOptionalClass = null;

static {
try {
javaUtilOptionalClass =
ClassUtils.forName("java.util.Optional", DataBinder.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
// Java 8 not available - Optional references simply not supported then.


解决办法
1)修改业务,不允许一次提交超过256条数据
2)在需要的Action中添加InitBinder方法。如果所有Action都需要添加……不仅工作量很大,而且代码冗余很难看

//在当前Controller中加 或者 在 BaseController 中加入
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);
}


//或者 采用 @ControllerAdvice
package cn.mwee.wpos.report.aspect;

import cn.mwee.wpos.common.config.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;

import javax.servlet.http.HttpServletRequest;

/**
* Created by luob on 2017/9/21.
*/
@ControllerAdvice
public class CollectionGrowLimitAdvice {
@Autowired
private AppConfig appConfig;

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


3)增加一个WebBindingInitializer类,并在xml中配置。推荐大笑(如果你不知道改哪个xml文件,先好好学习一下SpringMVC吧奋斗)

public class DataBindingInitializer implements WebBindingInitializer {
@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);
}
}


spring-bean.xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="xxx.DataBindingInitializer"/>
</property>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值