小编前几天遇见一个问题,组长说beanUtils太好性能了怎么样解决?
我们的项目是个springcloud微服务项目,所以很怕jar包冲突,因此这个问题要解决
解决办法就是自定义转换器
使用到这个场景无非是得到的对象与传递给前端的不一致
1.首先写一个抽象接口
package com.huawei.koophone.openpower.common.converter;
import java.util.ArrayList;
import java.util.List;
/**
* 对象转换父类
*
* @author zouchaoyu
* @version 2023/10/22
* @see [自定义注解]
* @since []
*/
public abstract class BaseConverter<D, E>
{
/**
* DTO转Entity
*
* @param dto /
* @return /
*/
public abstract E toEntity (D dto);
/**
* Entity转DTO
*
* @param entity /
* @return /
*/
public abstract D toDto (E entity);
/**
* DTO集合转Entity集合
*
* @param dtoList /
* @return /
*/
public List<E> toEntity (List<D> dtoList)
{
if (dtoList == null)
{
return null;
}
List<E> list = new ArrayList<> (dtoList.size ());
for (D dto : dtoList)
{
list.add (toEntity (dto));
}
return list;
}
/**
* Entity集合转DTO集合
*
* @param entityList /
* @return /
*/
public List<D> toDto (List<E> entityList)
{
if (entityList == null)
{
return null;
}
List<D> list = new ArrayList<> (entityList.size ());
for (E entity : entityList)
{
list.add (toDto (entity));
}
return list;
}
}
然后我们先来看看不使用这个转换器,使用set的场景
我想要将SubsListReq转换成QuerySubsProductReq,我使用的set赋值,不是说不可以,只是不美观,看起来也很low
于是我新建了一个QuerySubsProductReqConvert 类,注入bean,然后实现BaseConverter(我们自定义接口,上面那个)<>里面是需要互相转换的类,它会自动生产下面二个方法,你可以根据返回值来看。
然后我们在需要转换的地方得到这个类,然后调用它的方法,如果你找不到方法名,注意方法是不是public的
另外说一下为什么注入使用private final 类名 对象名
因为这个可以在加载时直接注入,不需要等到用了再注入,有bug可以第一时间发现
好啦,喜欢小编的记得一键三连哦