当前,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>
遇到的问题是它不会自动修剪从控制器收到的参数字段。还请告知我是否可以添加一些限制以排除密码字段。