Java 将请求DTO映射到实体对象的设计模式?

Java 将请求DTO映射到实体对象的设计模式?,java,spring,design-patterns,spring-data,spring-data-mongodb,Java,Spring,Design Patterns,Spring Data,Spring Data Mongodb,我正在从事一个基于spring的项目,我正在研究是否有一种干净的方法可以将带有“type”字段的请求DTO映射到一个实体,以写入mongodb,而不使用一堆if语句。 例如,请求DTO看起来像: AnimalRequestDTO.java Public class AnimalRequestDTO { private AnimalType animalType; private String name; private int age; ... } 我想自动将

我正在从事一个基于spring的项目,我正在研究是否有一种干净的方法可以将带有“type”字段的请求DTO映射到一个实体,以写入mongodb,而不使用一堆if语句。 例如,请求DTO看起来像:

AnimalRequestDTO.java

Public class AnimalRequestDTO {
    private AnimalType animalType;
    private String name;
    private int age;
    ...
}
我想自动将该请求映射到一个实体,因此如果AnimalType是AnimalType.Monkey,它将映射到MonkeyEntity.java类,或者如果它是AnimalType.Horse,它将映射到HorseEntity.java

我想知道是否有一个有用的spring工具/设计模式围绕着这样的东西


提前感谢

有几种框架可用于DTO到实体和实体到DTO之间的映射。 1.映射结构 2.推土机 4.奥利卡 5.模型映射器
JMapper

Spring默认使用Jackson,Jackson有一个称为多态类型处理的特性。检查(它以动物为例,就像你做的那样)和。通过修改
AnnotationIntrospector
,可以完全自定义逻辑,但这不是小事,您可能不需要它。如果这不是您想要的,并且确实需要将对象映射到对象,请查看MapStruct、Orika等库。根据您的问题陈述,似乎您正在为每种动物类型创建单独的实体,这是一种糟糕的做法,您为每种动物创建一个实体,并创建一个类型来区分它,就像您在DTO中所做的那样。为什么每种动物有不同的实体?如果您要创建不同的实体,那么也要创建不同的DTO,然后只需使用ModelMapper,请查看