所以我有这样的方法
public void updateEntity(String id) {
.....
.....
Person person = personRepository.findById(id);
StudentDTO studentDTO = studentService.getStudent(id); //This returns StudentDTO for the given id
Person updatedPerson = personService.updatePerson(person, studentDTO);
personRepository.save(updatedPerson);
}
public Person updatePerson(Person person, StudentDTO studentDTO) {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setSkipNullEnabled(true);
modelMapper.typeMap(StudentDTO.class, Person.class).addMappings(mapper -> {
mapper.map(StudentDTO::getId, PersonDTO::setId);
mapper.map(src -> PersonUtil.getTaskName(src.getTaskInfo), Person::setTaskName);
})
return modelMapper.map(studentDTO, Person.class);
}我面临着这段代码的两个问题。
发布于 2022-10-06 07:05:20
您似乎需要一个org.modelmapper.Converter来从taskInfo中分配taskName。
假设StudentDTO.getTaskInfo()返回TaskInfo类型,而Person.taskName为String类型
Converter<TaskInfo, String> nameOfTaskInfo = ctx -> PersonUtil.getTaskName(ctx.getSource());然后...and ..。
modelMapper.typeMap(StudentDTO.class, Person.class).addMappings(mapper -> {
mapper.map(StudentDTO::getId, Person::setId); // I think this could be skipped
mapper.using(nameOfTaskInfo).map(StudentDTO::getTaskInfo), Person::setTaskName);
})但是TBH,我也是ModelMapper的新手,也许有更简单的解决方案。
解释
map函数的目的似乎是通过一些魔术(使用字节码操纵存根对象)来确定Getters和Setters。提供的表达式是在定义TypeMap时执行的,而不是在实际映射期间执行的。文档说:
将源getter值映射到目标setter
另一方面,在映射期间执行org.modelmapper.Converter。
https://stackoverflow.com/questions/73951672
复制相似问题