首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapStruct -无法将属性Optional<LocalDate>映射到LocalDate

MapStruct -无法将属性Optional<LocalDate>映射到LocalDate
EN

Stack Overflow用户
提问于 2018-10-03 13:37:09
回答 3查看 7.8K关注 0票数 2

注意:这与StackOverflow上的其他问题不同,因为它们通过手动映射两个类来解决这个问题。由于ScheduleSource和ScheduleTarget是完全相同的类,所以我希望它们能够自动映射。

嗨,

我有两个类ScheduleSource和ScheduleTarget。它们有着完全相同的特性。

当我尝试使用MapStruct从ScheduleSource映射到ScheduleTarget时,我会得到以下错误:

代码语言:javascript
复制
  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)

我已经附上了这两份文件。你能帮忙吗?

档案如下:

  • ScheduleSource,ScheduleTarget -两个Java
  • ScheduleMapper -映射类。
  • ScheduleMapper.java

包testStructMap;导入org.mapstruct.*;import org.mapstruct.factory.*;@Mapper公共接口ScheduleMapper { ScheduleMapper INSTANCE = Mappers.getMapper( ScheduleMapper.class );ScheduleTarget scheduleSourceToScheduleTarget(ScheduleSource scheduleSource);}

  • ScheduleSource.java,ScheduleTarget.java -同结构

包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;}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-03 14:05:19

我不熟悉mapstruct,但我可以猜到它映射了不同的对象:)

如果源类和目标类具有相同的结构,那么问题是

代码语言:javascript
复制
public Optional<LocalDate> getStartDate();
public void setStartDate(LocalDate startDate);

因此,它获取可选对象,并尝试将其传递给接受LocalDate的方法。

所以你可能的行动方式是

  1. 更改getter以返回一个简单对象
  2. 更改setter以接受可选选项(我认为这很好,但似乎有点不合适)
  3. 声明映射器方法
票数 1
EN

Stack Overflow用户

发布于 2018-10-03 18:03:14

在1.3.0.beta 1中,支持以下内容:

代码语言:javascript
复制
 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);
  }
}
票数 3
EN

Stack Overflow用户

发布于 2020-09-17 09:32:54

映射目标可选为源,这不是可选的,如何使它遵循下面的示例:

代码语言:javascript
复制
@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" })

此外,我们还需要添加帮助类的用法和名称。

代码语言:javascript
复制
@Mapper(componentModel = "spring", uses = { Helper.class })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52628306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档