危險!請馬上替換代碼中的BeanUtils!?。?/h1>
點擊關(guān)注下方公眾號,架構(gòu)師全套資料 都在這里
0、2T架構(gòu)師學(xué)習(xí)資料干貨分享 上一篇:百度前員工因內(nèi)網(wǎng)發(fā)布“女優(yōu)一覽表”被辭退,自訴原因:想轉(zhuǎn)崗鑒黃師?。?!
大家好,我是互聯(lián)網(wǎng)架構(gòu)師。
1. 背景
2. 示例
接下來我們看 Spring 的 BeanUtils 的屬性拷貝會存在啥問題: 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é)論
瀏覽
41
點擊關(guān)注下方公眾號,架構(gòu)師全套資料 都在這里
上一篇:百度前員工因內(nèi)網(wǎng)發(fā)布“女優(yōu)一覽表”被辭退,自訴原因:想轉(zhuǎn)崗鑒黃師?。?!
大家好,我是互聯(lián)網(wǎng)架構(gòu)師。
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é)論
評論
圖片
表情



