Я хочу сопоставить EmployeeDto
с EmployeeValue
. Рассмотрим следующие классы:
public class EmployeeDto {
private String telephoneNumber;
private Integer companyId;
public String getTelephoneNumber() {
return telephoneNumber;
}
public void setTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
public Integer getCompanyId() {
return companyId;
}
public void setCompanyId(Integer companyId) {
this.companyId = companyId;
}
}
public class EmployeeValue {
private String telephoneNumber;
private Company company;
public String getTelephoneNumber() {
return telephoneNumber;
}
public void setTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
public class Company {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
Я пытаюсь отобразить эти классы с помощью mapstruct-mapper:
@Mapper(componentModel = "cdi")
public interface EmployeeDto2EmployeeValueMapper {
@Mapping(source ="companyId", target = "company.id")
EmployeeValue map(EmployeeDto dto);
}
Это работает просто отлично, так как этот тест выполняется зеленым:
class EmployeeDto2EmployeeValueMapperTest {
private static final String TELEPHONE_NUMBER = "telephoneNumber";
private static final int COMPANY_ID = 1;
private EmployeeDto2EmployeeValueMapper classUnderTest = Mappers.getMapper(EmployeeDto2EmployeeValueMapper.class);
@Test
void map() {
EmployeeDto employeeDto = new EmployeeDto();
employeeDto.setTelephoneNumber(TELEPHONE_NUMBER);
employeeDto.setCompanyId(COMPANY_ID);
EmployeeValue outcome = classUnderTest.map(employeeDto);
assertThat(outcome.getTelephoneNumber(), is(TELEPHONE_NUMBER));
assertThat(outcome.getCompany().getId(), is(COMPANY_ID));
}
}
Теперь, если я добавлю unmappedSourcePolicy = ReportingPolicy.ERROR
к мапперу, то есть
@Mapper(componentModel = "cdi", unmappedSourcePolicy = ReportingPolicy.ERROR)
public interface EmployeeDto2EmployeeValueMapper {
@Mapping(source ="companyId", target = "company.id")
EmployeeValue map(EmployeeDto dto);
}
, сборка завершится со следующим сообщением об ошибке: Свойства не отображенного источника: "telephoneNumber".
Мне это кажется ошибкой, потому что эти поля действительно были отображены (как доказал мой тест ранее). У вас есть идеи по этому поводу?