Java类库BeanUtils组件使用方法及实例详解

2020-02-20 20:00:49王振洲

map数据封装到javaBean

注意:要map中的数据封装到JavaBean中去,需要map中的key与JavaBean里面的私有化的属性要相匹配

@Test
	public void test() throws Exception {
		//创建对象
		Student s2=new Student();
		//1.map的数据拷贝到对象中去
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("id","12233");
		map.put("name","老王");
		map.put("sex","男");
		BeanUtils.populate(s2, map);
		System.out.println(s2);
	}

类型转换器

当javaBean中出现非基本类型数据的私有化属性,并且需要对该数据进行封装时,就要去注册该数据类型的类型转换器了,不如就会出现错误,比如该Student对象中的日期类型。

日期类型转换出错:org.apache.commons.beanutils.converters.DateConverter toDate 警告:  DateConverter does not support default String to 'Date' conversion,可以看出工具类converters在转换的时候出现了错误,为此我们可以去查看该类,以便我们接下来去实现类型转换。

converter

在解压出来的BeanUtils文件下的apidoc目录中的index.html里面可以找到该类的说明,会发现它是一个接口,有很多的实现类,我们可以使用里面的实现类来做日期类型的转换或者说我们可以自己去注册个类型转换器。

自定义类型转换器

去复写ConvertUtils里面的register(Converter converter, Class<?> clazz)方法

@Test
	public void test2() throws Exception {
		//假设网页表单提交过来的数据
		String name="老王";
		String id="121212";
		String date="2018-10-11";
		Student s=new Student();
		//1.自定义:注册日期类型转换器去复写ConvertUtils里面的register(Converter converter, Class<?> clazz)方法
		ConvertUtils.register(new Converter() {
			//修改第三方jar引入方法的参数时候,可以关联源码,ctrl选择该类,点进去,选择Attach source--->external file
			@Override
			public Object convert(Class type, Object value) {
				//判断
				if (value ==null ||"".equals(value.toString().trim())){
					return null;	
				}
				if (type !=Date.class){
					return null;
				}
				try {
					//字符串转换为日期
					SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
					return sdf.parse(value.toString());
				} catch (Exception e) {
					throw new RuntimeException(e);
				}
			}
		},Date.class);
		//把表单的数据封装到对象中去
		BeanUtils.copyProperty(s, "name",name);
		BeanUtils.copyProperty(s, "id",id);
		BeanUtils.copyProperty(s, "d",date);
		System.out.println(s);
	}

使用工具类提供的类型转换器

@Test
	public void test3() throws Exception {
		//利用组件提供的日期类型转换器,提供一个实现类
		//假设表单的数据
		String name="老王";
		String id="121212";
		//当日期字符串出现空字符串或者出现空格的情况,会报错org.apache.commons.beanutils.ConversionException
		String date="2018-09-12";
		Student s=new Student();
		ConvertUtils.register(new DateLocaleConverter(), Date.class);
		//把表单的数据封装到对象中去
		BeanUtils.copyProperty(s, "name",name);
		BeanUtils.copyProperty(s, "id",id);
		BeanUtils.copyProperty(s, "d",date);
		System.out.println(s);
	}