在前端传入后端数据的时候,有时候,会传过来很多的数据,如果普通的一个一个的写,那么会写很多数据,导致代码冗余,看起来很多很杂,为了让代码优化,我们可以,对代码进行优化,让前端的数据进行一次封装,直接封装成我们所需要的实体类,那么为了用这个方法,我们首先要导入一个外部包,到我们的外部库,commons-beanutils:commons-beanutils(1.9.3),导入之后我们就可以用方法进行封装了
Map<String, String[]> parameterMap = request.getParameterMap();
// 首先获取前端数据的字典类对象
User user = new User();
//建立实体类user
BeanUtils.populate( user,parameterMap );
//吧实体类和字典对象放入我们的 BeanUtils的populate方法中,进行封装,底层的原理就是实体类中的set方法
那么前端传过来的数据,都是字符串类型的数据,但是我们的实体类中,不一定都是字符串类型的,如果假设现在我们的日期属性是date类型的,但是前端传进来的是字符串类型的,这个时候如果调用set方法的话,我们的date属性的set方法是date类型的,但是前端传入字符串,调用set方法, 那么一定会报错,因为形参实参类型不同,那么封装一定会失败,这个时候我们有两种方法:
1.改写set方法
public void setBirthday(String birthday) {
SimpleDateFormat sf=new SimpleDateFormat( "YYYY-MM-dd" );
try {
Date parse = sf.parse(birthday);
this.birthday =parse;
} catch (ParseException e) {
e.printStackTrace();
}
}
2.建Convert,改写属性类型
public class MyConvert implements Converter {
//完成日期转化
@Override
public Date convert(Class aClass,Object o) {
String dateStr = String.valueOf( o );
SimpleDateFormat sf=new SimpleDateFormat( "YYYY-MM-dd" );
try {
Date parse = sf.parse( dateStr );
return parse;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
//改写完后,在封装实体类之前,先使用我们这个方法,去进行日期的转换
ConvertUtils.register(new MyConvert(), Date.class ); //参数1转换器接口,参数2最终需要的class文件
BeanUtils.populate( user,parameterMap );
以上两种方法,都可以让前端的数据进行实体类的封装,并且让数据可以进行转换