Spring MVC Converter для перекрестной привязки контроллера автоматически обрезает поля формы - PullRequest
0 голосов
/ 17 ноября 2018

В настоящее время я использую редактор свойств, чтобы автоматически обрезать поля из параметров.Однако я обнаружил, что редактор свойств не является потокобезопасным.Также одна из моих целей - исключить поля пароля из обрезки.

Так, например, у меня есть объект формы 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>

проблема, с которой я сталкиваюсь, заключается в том, что она не автоматически обрезает параметры полей, полученные от контроллеров.Также, пожалуйста, сообщите, можно ли добавить некоторые ограничения для исключения полей пароля.

...