Nie mogę zrobić dziedziczenia, bo wtedy nie zapodam 2 razy interfejsów GenericMapper
.
Już na prawdę nie wiem o co chodzi...
zmieniłem mappera Employee na:
Kopiuj
@Component
public class EmployeeBaseMapper implements GenericMapper<Employee, EmployeeDto> {
UserMapper userMapper;
@Autowired
public EmployeeBaseMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public EmployeeDto sourceToDto(Employee source) {
if (source == null) {
return null;
}
UserDto userDto = userMapper.sourceToDto(source.getUser());
EmployeeDto dto = new EmployeeDto();
dto.setActive(source.isActive())
.setPesel(source.peselEncrypted)
.setFirstName(source.getFirstName())
.setLastName(source.getLastName())
.setUserDto(userDto);
return dto;
}
@Override
public Employee dtoToNewSource(EmployeeDto dto) {
if(dto == null) {
return null;
}
User user = userMapper.dtoToNewSource(dto.getUserDto());
Employee source = new Employee(dto.getPesel());
source.setActive(dto.isActive());
source.setFirstName(dto.getFirstName());
source.setLastName(dto.getLastName());
source.setUser(user);
return source;
}
@Override
public Employee dtoToUpdatedSource(Employee source, EmployeeDto dto) {
if(dto == null) {
return null;
}
if(source == null) {
return dtoToNewSource(dto);
}
User user = userMapper.dtoToUpdatedSource(source.getUser(), dto.getUserDto());
source.setActive(dto.isActive());
source.setFirstName(dto.getFirstName());
source.setLastName(dto.getLastName());
source.setUser(user);
return source;
}
}
i mapper Driver, Shipper, CallCenterConsultant w takim stylu:
Kopiuj
@Component
public class DriverMapper implements GenericMapper<Driver, DriverDto> {
EmployeeBaseMapper baseMapper;
@Autowired
public DriverMapper(EmployeeBaseMapper baseMapper) {
this.baseMapper = baseMapper;
}
@Override
public DriverDto sourceToDto(Driver source) {
return (DriverDto) baseMapper.sourceToDto(source);
}
@Override
public Driver dtoToNewSource(DriverDto dto) {
return (Driver) baseMapper.dtoToNewSource(dto);
}
@Override
public Driver dtoToUpdatedSource(Driver source, DriverDto dto) {
return (Driver) baseMapper.dtoToUpdatedSource(source, dto);
}
}
i dalej dostaję:
java.lang.ClassCastException: com.julian.bella.api.dto.EmployeeDto cannot be cast to com.julian.bella.api.dto.DriverDto at com.julian.bella.api.mapper.DriverMapper.sourceToDto(DriverMapper.java:21) ~[classes/:na]
Czemu?! Skoro DriverDto
to nic innego jak EmployeeDto
:
Kopiuj
@Component
public class DriverDto extends EmployeeDto {
}
new
jest lepiej? Jutro obejrze ;)