本文主要是介绍SpringBoot 表单提交参数绑定 List 下标越界,超过 256,报数组越界异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 》原因
- 》解决方案
》原因
Spring Validation
的 org.springframework.validation.DataBinder
类中默认限制,表单提交 List
元素数量超过 256
时就会抛出异常
public class DataBinder implements PropertyEditorRegistry, TypeConverter {/** Default limit for array and collection growing: 256. */public static final int DEFAULT_AUTO_GROW_COLLECTION_LIMIT = 256;
}
》解决方案
-
局部方案
在接口所在的
Controller
中做如下配置缺点:仅作用于当前
Controller
@InitBinder public void initBinder(WebDataBinder binder) {// 设置处理嵌套属性binder.setAutoGrowNestedPaths(true);// 配置集合上限数量binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE); }
-
全局方案
通过
@Configuration
注解和RequestMappingHandlerAdapter
全局配置缺点:会导致枚举类上的
@JsonValue
注解作用失效,无法解析映射枚举类值@RequiredArgsConstructor @Configuration public class WebBinderConfig implements InitializingBean {private final RequestMappingHandlerAdapter requestMappingHandlerAdapter;@Overridepublic void afterPropertiesSet() {requestMappingHandlerAdapter.setWebBindingInitializer(new ConfigurableWebBindingInitializer() {@Overridepublic void initBinder(@NotNull WebDataBinder binder) {super.initBinder(binder);// 设置处理嵌套属性binder.setAutoGrowNestedPaths(true);// 配置集合上限数量binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);}});} }
-
安全优雅方案
既想全局配置,又不影响到枚举类映射
可以通过@ControllerAdvice
和@RestControllerAdvice
配置个前置处理器,在其内部注入@InitBinder
,这样就可以作用到全局的Controller
上@ControllerAdvice @RestControllerAdvice public class ReqControllerAdvice {@InitBinderpublic void initBinder(WebDataBinder binder) {// 设置处理嵌套属性binder.setAutoGrowNestedPaths(true);// 配置集合上限数量binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);} }
这篇关于SpringBoot 表单提交参数绑定 List 下标越界,超过 256,报数组越界异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!