gpt4 book ai didi

java - 关于 MapStruct 映射的多个问题

转载 作者:行者123 更新时间:2023-12-04 01:25:24 24 4
gpt4 key购买 nike

我是使用 MapStruct 的新手,因此面临一些相同的问题。

我有以下模型类:-

@Data
class User {

@Field
private String fullName;

@Field("experience")
private List<Experience> workExperience;

//other fields

}

@Data
class Experience {

private Date joiningDate;

//other fields
}


现在,我有以下 DTO
@Data
class UserDTO {

private String firstName;

private String lastName;

private List<ExperienceDTO> workExperience;

//other fields

}

@Data
class ExperienceDTO {

private String joiningDate;

//other fields
}


已将 UserMapper 接口(interface)编写为:-
@Mapper(componentModel = "spring")
public interface UserMapper {

@Mappings({
@Mapping(target = "firstName",source = "fullName",
qualifiedByName = "firstNameExtractor"),
@Mapping(target = "lastName",source = "fullName",
qualifiedByName = "lastNameExtractor")
})
UserDTO userToUserDTO(User user);

@Mappings({
@Mapping(target = "joiningDate", source = "joiningDate",
dateFormat = "yyyy-MM-dd HH:mm:ss")
})
List<ExperienceDTO> experienceToExperienceDTO(List<Experience> experience);

@Named("firstNameExtractor")
public static String getFirstName(String name){
String[] nameParts = name.split(" ");
return nameParts[0];
}
//similarly have a lastNameExtractor

但我收到以下错误:-
  • 源参数中不存在名为“fullName”的属性。你是否
    意思是“空”?
  • 结果类型中的未知属性“firstName”
    com.personal.portfolio.dto.UserDTO。您指的是“空”吗?
  • 源参数中不存在名为“joiningDate”的属性。做过
    你的意思是空的”?
  • 结果类型中的未知属性“joiningDate”
    java.util.List。你是否
    “空”是什么意思?

  • 我知道我的设计可能是错误的,但我故意这样做是为了了解 MapStruct 的工作原理。任何人都可以帮助我了解我在做什么错误?

    最佳答案

    第一个错误是因为 MapStruct 没有看到 Lombok 注释的方法。
    将注释处理器添加到构建中:

                       <annotationProcessorPaths>
    <path>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>${org.mapstruct.version}</version>
    </path>
    <path>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${org.projectlombok.version}</version>
    </path>
    </annotationProcessorPaths>

    第二个是将@Mapping 添加到对象列表中,而不是对象本身。创建一个将单个体验映射到 ExperienceDTO 的方法,在其中添加注释并将其从 experienceToExperienceDTO 方法中删除。

    关于java - 关于 MapStruct 映射的多个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009954/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com