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);