关于Spring数据绑定与PropertyEditor
要进行绑定的类型是我自己定义的。
实现一个自己的PropertyEditor。用不着从头开始,有一个给我们继承。
最后这个自定义的属性编辑器当然要注册给spring
试一试,把下面这个bean的属性都打印一下
果然自定义的属性编辑器生效了。
虽然跟我们想的功能一样,但是spring给出一个警告。
【Passing PropertyEditor instances into CustomEditorConfigurer is deprecated: use PropertyEditorRegistrars or PropertyEditor class names instead.】
到spring官方网站去看看说明,修改一下配置可以消除这个警告。
要进行绑定的类型是我自己定义的。
package mypackage;
public class Address { // 地址类
private String zip; // 邮编
private String city; // 城市
private String street; // 街道
// 为了省博客的篇幅,这里就不写getter和setter啦
}
实现一个自己的PropertyEditor。用不着从头开始,有一个给我们继承。
package mypackage;
import java.beans.PropertyEditorSupport;
public class AddressPropertyEditor extends PropertyEditorSupport {
@Override
public String getAsText() {
Address address = (Address) getValue(); // super.getValue() 顾名思义,得到我们要转换的那个对象
return new StringBuilder()
.append(address.getZip() + ",")
.append(address.getCity() + ",")
.append(address.getStreet())
.toString();
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (text == null || text.equalsIgnoreCase("")) {
throw new IllegalArgumentException();
}
Address value = new Address();
String[] ss = text.split("::", 3);
value.setZip(ss[0]);
value.setCity(ss[1]);
value.setStreet(ss[2]);
setValue(value); // super.setValue()也是顾名思义可以知道它是干什么的
}
}
最后这个自定义的属性编辑器当然要注册给spring
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="mypackage.Address">
<bean class="mypackage.AddressPropertyEditor" />
</entry>
</map>
</property>
</bean>
试一试,把下面这个bean的属性都打印一下
果然自定义的属性编辑器生效了。
package mypackage;
@Component
public class Person {
@Value("1")
private Integer id;
@Value("yingzhuo")
private String name;
@Value("1234")
private String password;
@Value("410007::changsha::laodong road.")
private Address address;
// getter and setter
}
虽然跟我们想的功能一样,但是spring给出一个警告。
【Passing PropertyEditor instances into CustomEditorConfigurer is deprecated: use PropertyEditorRegistrars or PropertyEditor class names instead.】
到spring官方网站去看看说明,修改一下配置可以消除这个警告。
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="mypackage.Address"
value="mypackage.AddressPropertyEditor" />
</map>
</property>
</bean>