Java Bean 유형 간의 매핑 구현 단순화하는 코드 생성기
MapStruct를 통해 DTO ↔ Entity 변환 과정을 수행하고 있었다. Group 을 생성하는 로직에 있어 개선점을 필요로 하였다.
@Entity
@Getter
@Where(clause = "deleted_at is null")
@EntityListeners(AuditListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Group implements Auditable {
@Id
@GeneratedValue(generator = "uuid2")
@Column(name = "id", columnDefinition = "BINARY(16)")
private UUID id;
private String name;
private String groupImage;
private UUID leaderId;
}
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class MakeGroupRequest {
private String name;
private String groupImage;
private UUID leaderId;
}
결국 해당 인자를 제거하고 로직을 짜야 하는데 MapStruct 상의 변화가 필요하다 !!!!
@Mapping(target = "name", source = "name")
@Mapping(target = "groupImage", source = "groupImage")
**@Mapping(target = "leaderId", source = "leaderId")**
@Mapping(target = "baseTime", ignore = true)
@Mapping(target = "groupMembers", ignore = true)
@Mapping(target = "groupPlans", ignore = true)
Group toGroupEntity(MakeGroupRequest groupDto, UUID leaderId);
2개 이상의 인자를 MapStruct를 통해 변환하기 위해서는 해당 인자(source)가 어느 인자 객체에서 왔는지 명시해줘야 한다. MakeGroupRequest에서 name과 groupImage를 받아오기 때문에 source명을 “groupDto.XXX” 이렇게 표기해줘야 한다.
@Mapping(target = "baseTime", ignore = true)
@Mapping(target = "groupMembers", ignore = true)
@Mapping(target = "groupPlans", ignore = true)
@Mapping(target = "name",source = "groupDto.name")
@Mapping(target = "groupImage", source = "groupDto.groupImage")
@Mapping(target = "leaderId", source = "leaderId")
Group toGroupEntity(MakeGroupRequest groupDto, UUID leaderId);