要进行绑定的类型是我自己定义的。
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的属性都打印一下
果然自定义的属性编辑器生效了。
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官方网站去看看说明,修改一下配置可以消除这个警告。