저는 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 인터페이스를 다음과 같이 작성했습니다.
@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"이라는 속성이 없습니다. "null"을 의미 했습니까?
- 결과 유형 com.personal.portfolio.dto.UserDTO에 알 수 없는 속성 "firstName"이 있습니다. "null"을 의미 했습니까?
- 소스 매개변수에 "joiningDate"라는 속성이 없습니다. 텅텅 비었단 말입니까?"
- 결과 유형 java.util.List에 알 수 없는 속성 "joiningDate"가 있습니다. "비어있다"라고 하셨나요?
내 디자인이 틀릴 수도 있다는 것을 알고 있지만 MapStruct가 작동하는 방식을 이해하기 위해 의도적으로 이렇게 합니다. 친절하게도 내가 어떤 실수를 하고 있는지 이해하는 데 도움을 줄 수 있는 사람이 있습니까?