我有一个项目,其中有一个Library
实体,其中包含类型为media
的字段Media
。 Media
是一个抽象类,由类Image
和类Video
实现。
我还有一个dto LibraryDto
,其字段media
的类型为MediaDto
。 MediaDto
包含一个字段,其值可以为"image"
或"video"
。我的问题是:如何根据Image
的{{1}}字段的值告诉mapstruct实例化Video
类还是type
类?
感谢您的回复。
答案 0 :(得分:1)
对不起,我第一次误解了你的问题。
您可以创建对象工厂方法,该方法基于Media
字段实例化type
,如下所示:
@Mapper
public interface LibraryMapper {
Library libraryDtoToLibrary(LibraryDto libraryDto);
Media mediaDtoToMedia(MediaDto mediaDto);
@ObjectFactory
default Media createMedia(MediaDto mediaDto) {
if ("image".equals(mediaDto.getType())) {
return new Image();
} else if ("video".equals(mediaDto.getType())) {
return new Video();
}
throw new IllegalArgumentException("Unknown media type.");
}
}