@MapperConfig(uses = MyMapper.class)
public interface MyMapperExtended extends MyMapper {
default List<ChildClass> someObjectListToChildClassList(List<SomeObject> someList) {
//Some special logic here and looping which makes it so cannot use the @Mapping annotations
//Call the mapper for the parent so that the base properties are mapped
ParentClass mappedParentClass = this.someObjectListToParentClassList(someList);
//Uses a copy constructor to copy over the mapped base properties
ChildClass myChildClass = new ChildClass(mappedParentClass);
myChildClass.setExtraProperty("whatever value");
return myChildClass;
}
}
@Mapper(imports = { SomeUtilityClass.class })
public interface MyMapper {
@Mapping(target = "id", source = "someId")
@Mapping(target = "name", source = "name")
@Mapping(target = "someFieldWeIgnoreWhileMapping", ignore = true)
ParentClass someObjectListToParentClass(SomeObject someObject)
List<ParentClass> someObjectListToParentClassList(List<SomeObject> someList)
}
public class ParentClass {
UUID id;
String name;
String someFieldWeIgnoreWhileMapping;
public ParentClass() {}
}
public class ChildClass {
String extraProperty;
public ChildClass(ParentClass parent) {
super();
this.setId(parent.getId());
this.setName(parent.getName());
}
}
public class SomeObject {
UUID someId;
String name;
String someFieldWeIgnore;
public SomeObject () {}
}
在解决了几个不同的问题之后。我终于让它在生成代码的地方“工作”了,但它不适用于我的用例。我从上面发布的代码中排除了“表达式”的使用,因为我当时认为它不相关,但它导致了最后一个问题。
@Mapping(target = "id", source = "someId")
@Mapping(target = "name", source = "name")
@Mapping(target = "someFieldWeIgnoreWhileMapping", ignore = true)
@Mapping(expression = "java(SomeUtilityClass.doSomethingHelpful(someObject.getSpecialField()))", target = "specialField")
ParentClass someObjectListToParentClass(SomeObject someObject);
从Mapstruct生成的代码如下所示。
public ParentClass someObjectListToParentClass(SomeObject arg0) {
if (arg0 == null) {
return null;
} else {
ParentClass parentClass = new ParentClass();
parentClass.setId(arg0.getId());
parentClass.setName(arg0.getName());
//The problem.
//It puts the variable name as "someObject" because that's what the expression is hardcoded as in the Interface, but the varible is actually arg0 here
parentClass.setSpecialField(SomeUtilityClass.doSomethingHelpful(someObject.getSpecialField()));
}
}
对于没有像我这样的场景的人来说,添加@mapper就可以了(包括所有导入,如果有的话)。我决定只做一个单独的映射器,而不是从原来的映射器继承。
Hi这似乎适用于添加额外的方法,但不适用于在现有方法上添加新的注释。假设我们有以下课程:
关于MapStruct的问题。我有这样的情况,我从基实体扩展类,但不知道如何映射它。这是我的箱子。 BaseEntity: 基础: 没有显示错误,在映射器实现(生成的代码)中没有该ID的映射:
我有一个jar文件,其中有一些映射文件,我想添加作为hibernate.cfg.xml中的映射资源,因为我在org.hibernate.cfg.comfiguration中添加了jar。 在hibernate.cfg.xml中我添加了… 当我执行java应用程序时,我得到了这个异常... 有人能帮我吗?
是否可能在MapStruct中使用不同的映射器?我有这个映射器 是否可以将此实现更改为MapStruct?
问题内容: 在Java中,当接口扩展另一个接口时: 为什么要实现其方法? 当接口不能包含方法主体时,如何实现其方法 当扩展另一个接口而不实现它时,如何实现这些方法? 接口实现另一个接口的目的是什么? 这是Java的主要概念! 编辑: 在eclipse中,除了中的实现方法之外,还有实现符号。 当我将鼠标悬停在它上面时,它表示它实现了该方法!!! 问题答案: 为什么要实现其方法?当接口不能包含方法主体
嗨,到目前为止,我已经能够在简单的类之间进行映射了。现在我必须在接口之间进行映射。假设我有两个接口,其中许多类实现了这些接口。由于我没有了解如何做,我已经映射到特定类型的接口a。现在我需要做反向映射,其中属性可能在子类中,如何在这种情况下做反向映射。我尝试了@ inheritaninverseconfigurationin标签,但没有成功。< br >如果我能得到一些代码片段来理解,而不是阅读描述