注意:这与StackOverflow上的其他问题不同,因为它们通过手动映射两个类来解决这个问题。由于ScheduleSource和ScheduleTarget是完全相同的类,所以我希望它们能够自动映射。
嗨,
我有两个类ScheduleSource和ScheduleTarget。它们有着完全相同的特性。
当我尝试使用MapStruct从ScheduleSource映射到ScheduleTarget时,我会得到以下错误:
Can't map property "java.util.Optional<java.time.LocalDate> startDate" to "java.time.LocalDate startDate". Consider to declare/implement a mapping method: "java.time.LocalDate map(java.util.Optional<java.time.LocalDate> value)我已经附上了这两份文件。你能帮忙吗?
档案如下:
包testStructMap;导入org.mapstruct.*;import org.mapstruct.factory.*;@Mapper公共接口ScheduleMapper { ScheduleMapper INSTANCE = Mappers.getMapper( ScheduleMapper.class );ScheduleTarget scheduleSourceToScheduleTarget(ScheduleSource scheduleSource);}
包testStructMap;导入java.time.LocalDate;导入java.time.LocalTime;导入java.util.Optional;导入javax.validation.Contractions。*;公共类ScheduleSource { @FutureOrPresent @NotNull私有LocalDate startDate;@NotBlank私有字符串repeatType;@正私有整数事件;public可选的getStartDate() {返回Optional.ofNullable( startDate);} public void (LocalDate StartDate){ this.startDate = startDate;} public String getRepeatType() { repeatType;} public void setRepeatType(String repeatType) { this.repeatType = repeatType;} public可选的getOccurrences() {返回Optional.ofNullable(出现);} public void setOccurrences(整数出现){ this.occurrences =repeatType;}
发布于 2018-10-03 14:05:19
我不熟悉mapstruct,但我可以猜到它映射了不同的对象:)
如果源类和目标类具有相同的结构,那么问题是
public Optional<LocalDate> getStartDate();
public void setStartDate(LocalDate startDate);因此,它获取可选对象,并尝试将其传递给接受LocalDate的方法。
所以你可能的行动方式是
发布于 2018-10-03 18:03:14
在1.3.0.beta 1中,支持以下内容:
package testStructMap;
import org.mapstruct.*;
import org.mapstruct.factory.*;
@Mapper
public interface ScheduleMapper {
ScheduleMapper INSTANCE = Mappers.getMapper( ScheduleMapper.class );
ScheduleTarget scheduleSourceToScheduleTarget(ScheduleSource scheduleSource);
default <T> T unwrapOptional(Optional<T> optional) {
return optional.orElse(null);
}
}发布于 2020-09-17 09:32:54
映射目标可选为源,这不是可选的,如何使它遵循下面的示例:
@Named("HelperClass")
class Helper {
@Named("convertToOptional")
public Optional<KontaktpersonVerwandtschaftsgradTyp> convertToOptional(KontaktpersonVerwandtschaftsgradTyp optional) {
return optional != null ? Optional.of(optional) : Optional.empty();
};
}
@Mapping(target = "kontaktpersonVerwandtschaftsgrad", source = "tdfFall.kontaktpersonVerwandtschaftsgrad", qualifiedByName = { "HelperClass",
"convertToOptional" })此外,我们还需要添加帮助类的用法和名称。
@Mapper(componentModel = "spring", uses = { Helper.class })https://stackoverflow.com/questions/52628306
复制相似问题