我有很多实体扩展 Catalog
实体,并且有很多 dto CatalogDto
我有一个通用存储库、服务和映射器,如下所示
我的存储库:
@Repository
public interface CatalogRepository<T extends Catalog> extends JpaRepository<T, Integer>{
}
我的服务:
@Service
@Transactional
public class CatalogServiceImpl<T extends Catalog,Dto extends CatalogDto>{
private final Logger log = LoggerFactory.getLogger(CatalogServiceImpl.class);
private final CatalogRepository<T> repository;
private CatalogMapper<T,Dto> catalogMapper=new CatalogMapper<T,Dto>() {};
public CatalogServiceImpl(CatalogRepository<T> repository) {
this.repository = repository;
}
}
我的映射器:
public abstract class CatalogMapper<T extends Catalog,Dto extends CatalogDto> implements Rapper<T,Dto> {
@Override
public Dto entityToDto(T entity) {
return null;
}
@Override
public T dtoToEntity(Dto dto) {
return null;
}
}
我想在 dtoToEntity
方法中从 T 创建一个对象,并在 CatalogMapper
类的 entityToDto
方法中从 Dto 创建一个对象
最佳答案
我认为这两种方法应该是抽象的,因为每个映射器可能以不同的方式工作。无论如何,你可以提供像这样的基本实现
public T dtoToEntity(Dto dto) throws InstantiationException, IllegalAccessException {
T entity = (T) ((Class)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
BeanUtils.copyProperties(dto, entity);
return entity;
}
public Dto entityToDto(T entity) throws InstantiationException, IllegalAccessException {
Dto dto = (Dto) ((Class)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[1]).newInstance();
BeanUtils.copyProperties(entity, dto);
return dto;
}
使用泛型类的ParameterizedType,您可以创建一个新实例,然后执行一个简单的copyProperties
关于java - SpringBoot : create object from generic type in generic mapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64919906/