我有宠物,狗和猫实体类。狗和猫类扩展了宠物。
我还用@JsonSubtype注释了PetDTO,DogDTO和CatDTO,因此Jackson很好地解决了dto的类。
我想使用MapStruct编写一个映射器,该映射器接受一个PetDTO实体(可以是DogDTO或CatDTO)并返回Dog或Cat。
对我来说,使用映射库的主要目标是避免使用instanceof编写糟糕的代码。
有什么想法吗?谢谢!
目前尚无法立即使用-请在mapstruct的GitHub上查看此票证:#366 Support for abstract class mapping or classes with base class。您可以尝试将其推向此处,也可以自己贡献此功能。看起来是要求的合理功能。
我想在当前情况下,这是您最好的选择:
@Mapper
public interface PetMapper {
default PetDTO toPetDto(Pet pet) {
if (pet instanceof Dog) {
return toDogDTO((Dog) pet);
}
if (pet instanceof Cat) {
return toCatDTO((Cat) pet);
}
throw new IllegalArgumentException("Unknown subtype of Pet");
}
default Pet toPetEntity(PetDTO petDTO) {
if (petDTO instanceof DogDTO) {
return toDogEntity((DogDTO) petDTO);
}
if (petDTO instanceof CatDTO) {
return toCatEntity((CatDTO) petDTO);
}
throw new IllegalArgumentException("Unknown subtype of PetDTO");
}
DogDTO toDogDTO(Dog dog);
Dog toDogEntity(DogDTO dogDTO);
CatDTO toCatDTO(Cat cat);
Cat toCatEntity(CatDTO catDTO);
}