我想将// Before
DaggerAppComponent.factory().withContext(this).inject(this)
val factory: AppWorkerFactory = DaggerAppComponent.factory().withContext(this).workerFactory()
WorkManager.initialize(this, Configuration.Builder().setWorkerFactory(factory).build())
// After
val daggerAppComponent = DaggerAppComponent.factory().withContext(this)
daggerAppComponent.inject(this)
val factory: AppWorkerFactory = daggerAppComponent.workerFactory()
WorkManager.initialize(this, Configuration.Builder().setWorkerFactory(factory).build())
映射到EmployeeDto
。考虑以下类:
EmployeeValue
我正在尝试使用mapstruct-mapper映射那些类:
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;
}
}
这工作得很好,因为此测试运行绿色:
@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
生成失败,并显示以下错误消息: 未映射的源属性:“ telephoneNumber”。
在我看来,这似乎是一个错误,因为这些字段实际上已被映射(如我的测试之前所证明的)。 您对此有任何想法吗?
答案 0 :(得分:2)
关于mapstruct问题跟踪器,以下条目似乎可以解决您的问题。
问题:unmappedSourcePolicy设置为ERROR导致嵌套Bean问题#1881
https://github.com/mapstruct/mapstruct/issues/1881
根据发布的评论,修复程序将包含在即将发布的1.4.0中。但是,我找不到此版本何时发布。