Java 如何将父类DTO映射到父类实体

Java 如何将父类DTO映射到父类实体,java,modelmapper,Java,Modelmapper,我有以下类层次结构: public class BaseFaultType { protected String faultId; protected String faultDescription; protected String faultDetail; ... -> setters and getters } public class PollingFaultType extends BaseFaultType { protected I

我有以下类层次结构:

public class BaseFaultType
{
    protected String faultId;
    protected String faultDescription;
    protected String faultDetail;

    ... -> setters and getters
}

public class PollingFaultType extends BaseFaultType
{
    protected Integer initiatedFiles;
    protected Integer failedFiles;
    ... -> getters and setters
}

public class StoreFaultType extends BaseFaultType
{
    protected String storePath;
    ... -> getters and setters
}

...
有一个BaseFaultType具有一些公共属性(为了简单起见,我省略了其中的大部分),然后有多个类型使用其他属性扩展BaseFaultType

请注意,我无法控制这些类

我的应用程序接收这些子类型的对象。 然后我需要将这些对象映射到不同类型的实体,即:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = EntityConstants.ERROR)
public class FaultMessage
{
    private String errorId;
    private String errorDescription;
    private String errorDetail;
    private Boolean retryable;
    ... -> getters and setters
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = EntityConstants.POLLING_MESSAGE)
public class PollingFaultMessage extends FaultMessage
{
    private Integer failed;
    private Integer initiated;
    ... -> getters and setters
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = EntityConstants.STORE_MESSAGE)
public class StoreFaultMessage 
{
    ...
}
我正在使用ModelMapper进行此工作。 请注意,我使用的ModelMapper配置为禁用隐式映射(出于对此问题不感兴趣的原因):

尝试下一步:

豆子:

public class BaseType {
    protected String base;
    // getters/setters
}
public class Extended extends  BaseType {

    private String value ;
    // getters/setters
}
dto:

配置:

modelMapper.typeMap(SimpleDTO.class, BaseType.class)
                .addMapping(SimpleDTO::getBaseDTO, BaseType::setBase);
modelMapper.typeMap(SimpleDTO.class, Extended.class)
                .addMapping(SimpleDTO::getValueDTO, Extended::setValue)
                .includeBase(SimpleDTO.class, BaseType.class);
使用:


ModelMapper版本:1.1.0

请告诉我您的ModelMapper版本。最新版本-1.1.1我刚刚注意到TypeMap的includeBase()方法。现在我正在尝试,但似乎这是通往goyep的道路,你走的是正确的道路:)检查我的例子。我希望这会有帮助。
public class BaseType {
    protected String base;
    // getters/setters
}
public class Extended extends  BaseType {

    private String value ;
    // getters/setters
}
public class SimpleDTO {
    private String valueDTO;
    private String baseDTO;
    // getters/setters
}
modelMapper.typeMap(SimpleDTO.class, BaseType.class)
                .addMapping(SimpleDTO::getBaseDTO, BaseType::setBase);
modelMapper.typeMap(SimpleDTO.class, Extended.class)
                .addMapping(SimpleDTO::getValueDTO, Extended::setValue)
                .includeBase(SimpleDTO.class, BaseType.class);
SimpleDTO dto = new SimpleDTO();
dto.setBaseDTO("base");
dto.setValueDTO("value");
Extended ex = modelMapper.map(dto, Extended.class);