关于Spring数据绑定与PropertyEditor

关于Spring数据绑定与PropertyEditor

要进行绑定的类型是我自己定义的。
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>

猜你喜欢

转载自yingzhuo.iteye.com/blog/1198471
今日推荐