用于交叉绑定控制器的Spring MVC Converter自动修剪表单字段

时间:2018-11-17 06:42:54

标签: java spring spring-mvc converters

当前,Im使用属性编辑器自动修剪参数中的字段。但是,我发现属性编辑器不是线程安全的。我的目标之一也是从修整中排除密码字段。

因此,例如,我有一个表单对象“人”,其名称值为“ John Doe”,使用属性编辑器从控制器接收到后应该是“ John Doe”。

这是我当前的代码

@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>

遇到的问题是它不会自动修剪从控制器收到的参数字段。还请告知我是否可以添加一些限制以排除密码字段。

0 个答案:

没有答案