危險!請馬上替換代碼中的BeanUtils!!!
1. 背景
2. 示例
import?lombok.Data;
import?java.util.List;
@Data
public?class?A?{
????private?String?name;
????private?List?ids;
}
@Data
public?class?B?{
????private?String?name;
????private?List?ids;
}
import?org.springframework.beans.BeanUtils;
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?new?B();
????????BeanUtils.copyProperties(first,?second);
????????for?(String?each?:?second.getIds())?{//?類型轉(zhuǎn)換異常
????????????System.out.println(each);
????????}
????}
}
import?org.easymock.cglib.beans.BeanCopier;
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?new?B();
????????final?BeanCopier?beanCopier?=?BeanCopier.create(A.class,?B.class,?false);
????????beanCopier.copy(first,second,null);
????????for?(String?each?:?second.getIds())?{//?類型轉(zhuǎn)換異常
????????????System.out.println(each);
????????}
????}
}
import?org.mapstruct.Mapper;
import?org.mapstruct.factory.Mappers;
@Mapper
public?interface?Converter?{
????Converter?INSTANCE?=?Mappers.getMapper(Converter.class);
????B?aToB(A?car);
}
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?Converter.INSTANCE.aToB(first);
????????for?(String?each?:?second.getIds())?{//?正常
????????????System.out.println(each);
????????}
????}
}
import?java.util.ArrayList;
import?java.util.List;
import?javax.annotation.Generated;
import?org.springframework.stereotype.Component;
@Generated(
????value?=?"org.mapstruct.ap.MappingProcessor",
????comments?=?"version:?1.3.1.Final,?compiler:?javac,?environment:?Java?1.8.0_202?(Oracle?Corporation)"
)
@Component
public?class?ConverterImpl?implements?Converter?{
????@Override
????public?B?aToB(A?car)?{
????????if?(?car?==?null?)?{
????????????return?null;
????????}
????????B?b?=?new?B();
????????b.setName(?car.getName()?);
????????b.setIds(?integerListToStringList(?car.getIds()?)?);
????????return?b;
????}
????protected?List?integerListToStringList(List?list)?{
????????if?(?list?==?null?)?{
????????????return?null;
????????}
????????List?list1?=?new?ArrayList(?list.size()?);
????????for?(?Integer?integer?:?list?)?{
????????????list1.add(?String.valueOf(?integer?)?);
????????}
????????return?list1;
????}
}
?@Override
????public?B?aToB(A?car)?{
????????if?(?car?==?null?)?{
????????????return?null;
????????}
????????B?b?=?new?B();
????????b.setName(?car.getName()?);
????????if?(?car.getNumber()?!=?null?)?{?//?問題出在這里
????????????b.setNumber(?Long.parseLong(?car.getNumber()?)?);
????????}
????????b.setIds(?integerListToStringList(?car.getIds()?)?);
????????return?b;
????}
public?final?class?A2BConverter?{
????public?static?B?from(A?first)?{
????????B?b?=?new?B();
????????b.setName(first.getName());
????????b.setIds(first.getIds());
????????return?b;
????}
}
3. 結(jié)論
PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉(zhuǎn)發(fā)、在看。
評論
圖片
表情



