Странное поведение @InitBinder-а

Sep 17, 2012 21:26

Столкнулся с интересным поведением метода Spring контроллера, объявленного с аннотацией @InitBinder. Оказывается работа его зависит от порядка установки параметров!

Жил-поживал в @InitBinder-е контроллера Спринга кастомный эдитор StringTrimmerEditor.
Задача его очевидно угадывается по названию класса - отсекать пред- и пост-пробелы в строковых данных, приходящих в реквесте.
И вот столкнулись мы с проблемой, когда массив длиной более 256 элементов, приходящий в реквесте, перестал байндиться на объект модели типа List, кидая IndexOutOfBoundsException.. Проблема нечастая, но оказывается Гугль знает и про нее!
Очевидный же шаг, не так ли - добавить этот кастомный параметр в @InitBinder:

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
binder.setAutoGrowCollectionLimit(1000);
}

Но... Не работает!
Выношу установку параметра в отдельный метод, объявленный с аннотацией @InitBinder:

@InitBinder
public void initStringBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

@InitBinder
public void initListBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(1000);
}

Спринг это допускает, но опять не работает..
И, наконец, в процессе проб всего и вся, удалений, замены типа binder-а в параметре метода, так как-то случайно получилось, что я переставил местами эти методы, и КОД ЗАРАБОТАЛ!!! О_о
То есть буквально вот так, в таком порядке следования методов в классе:

@InitBinder
public void initListBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(1000);
}

@InitBinder
public void initStringBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

- работает, а наоборот (код выше) - не работает.

Попробовал и в одном методе.. Как в самом первом куске кода в этом сообщении - не работает, а строки кода в методе местами поменяешь - работает.

Что это?? Баг Спринга или я что-то не понимаю, не так делаю?

spring, collections, web

Previous post Next post
Up