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

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

java.lang.IndexOutOfBoundsException: Index: 256, Size: 256_第1张图片

注意其中的一个类  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
  
      
          
      
 

  • java.lang.IndexOutOfBoundsException: Index: 256, Size: 256_第2张图片
  • 大小: 83 KB
  • 查看图片附件

你可能感兴趣的:(java.lang.IndexOutOfBoundsException: Index: 256, Size: 256)