Я бы сделал go с @InitBinder
и PropertyEditorSupport
, предусмотренными для java beans. Если я правильно понял, вы хотите, чтобы все параметры @RequestParam
были строчными. Для этого я бы объявил свой собственный класс StringLowerCaseEditor
, как показано ниже
public class StringLowerCaseEditor extends PropertyEditorSupport
{
@Override
public String getAsText()
{
return getValue().toString();
}
@Override
public void setAsText( String text ) throws IllegalArgumentException
{
setValue( text.toLowerCase() );
}
}
И затем в классе @Controller
можно использовать метод с аннотацией @InitBinder
, который обрабатывает все запрос пришел к этому контроллеру. Из spring do c об аннотации
Такие методы init-binder поддерживают все аргументы, которые поддерживает RequestMapping, за исключением объектов команд / форм и соответствующих объектов результатов проверки. Методы init-binder не должны иметь возвращаемого значения; они обычно объявляются как void.
@InitBinder
public void initBinder( WebDataBinder dataBinder )
{
StringLowerCaseEditor lowerCaseEditor = new StringLowerCaseEditor();
dataBinder.registerCustomEditor( String.class, lowerCaseEditor );
}
Или, чтобы иметь глобальное влияние, добавьте @InitBinder Method
в @ControllerAdvice
класс. Это будет выполняться при вызове каждого контроллера. У вас есть мелкозернистый элемент управления для пакетов, который также нуждается в этом, через @ControllerAdvice(basePackages = "" )
@ControllerAdvice
public class AllControllerAdvice
{
@InitBinder
public void initBinder( WebDataBinder dataBinder )
{
StringLowerCaseEditor lowerCaseEditor = new StringLowerCaseEditor();
dataBinder.registerCustomEditor( String.class, lowerCaseEditor );
}
}
. Если вы хотите обрабатывать только определенные c @RequestParam
, вы можете использовать @InitBinder
с ожидаемый параметр
@InitBinder( "customerEmail" ) // Request param, can be comma separated
public void initBinder( WebDataBinder dataBinder )
{
StringLowerCaseEditor lowerCaseEditor = new StringLowerCaseEditor();
dataBinder.registerCustomEditor( String.class, lowerCaseEditor );
}