1 回答

TA貢獻1735條經驗 獲得超5個贊
@Mapper(componentModel = "spring")
interface Mapper {
@Mappings({
@Mapping(source = "street", target = "address.street"),
@Mapping(source = "city", target = "address.city")
})
Person fromPersonDTO(PersonDTO dto);
}
屬性name應該自動映射,只要它具有相同的名稱和嵌套級別
更新:
@Mapper(componentModel = "spring")
public abstract class Mapper {
@Autowired
private CityDAO cityDao;
@Mappings({
@Mapping(source = "street", target = "address.street"),
@Mapping(source = "city", target = "address.city")
})
Person fromPersonDTO(PersonDTO dto);
@AfterMapping
void after(@MappingTarget Person person) {
Address address = person.getAddress();
if (address != null) {
// additional null-checks might be required
address.setStreet(address.getStreet().replaceAll(" ", "_"));
address.setCity(cityDao.findByName(address.getCity()).getId();
}
}
}
請注意,為了使用自動裝配的 bean,映射器必須是一個類,而不是一個接口
添加回答
舉報