В настоящее время я использую редактор свойств, чтобы автоматически обрезать поля из параметров.Однако я обнаружил, что редактор свойств не является потокобезопасным.Также одна из моих целей - исключить поля пароля из обрезки.
Так, например, у меня есть объект формы Person со значением имени «Джон Доу», при использовании свойства Editor он должен быть «Джон Доу» при получении от контроллера.
Вот мой текущий код
@ControllerAdvice
public class ControllerSetup {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
PropertyEditorSupport stringPassthroughEditor = new PropertyEditorSupport() {
@Override
public void setAsText(String text) throws IllegalArgumentException {
super.setValue(text);
}
};
//Fields to ignore for trimming
binder.registerCustomEditor(String.class, "password", stringPassthroughEditor);
}
}
Но так как я перехожу на использование конвертера, вот мой следующий код
@AutoRegistered
@Component
public class StringConverter implements Converter<String, String> {
@Override
public String convert(String source) {
return source.trim();
}}
и вот регистратор
public class AutoRegisterFormatterRegistrar implements FormatterRegistrar {
/**
* All {@link Converter} Beans with {@link AutoRegistered} annotation.
* If spring does not find any matching bean, then the List is {@code null}!.
*/
@Autowired(required = false)
@AutoRegistered
private List<Converter<?, ?>> autoRegisteredConverters;
@Override
public void registerFormatters(final FormatterRegistry registry) {
if (this.autoRegisteredConverters != null) {
for (Converter<?, ?> converter : this.autoRegisteredConverters) {
registry.addConverter(converter);
}
}
}
}
И аннотация
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface AutoRegistered {}
и мое определение bean-компонента для службы преобразования
<bean id="applicationConversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatterRegistrars">
<set>
<bean
class="converter.AutoRegisterFormatterRegistrar"
autowire="byType" />
</set>
</property>
</bean>
проблема, с которой я сталкиваюсь, заключается в том, что она не автоматически обрезает параметры полей, полученные от контроллеров.Также, пожалуйста, сообщите, можно ли добавить некоторые ограничения для исключения полей пароля.