【发布时间】:2022-09-25 15:50:07
【问题描述】:
我有将int 映射到String 的自定义映射函数,但我只希望它应用于一种特殊情况。但是,它适用于所有 int 类型的源字段,而不仅仅是带有 java(...) 注释的源字段。
源类:
class Source {
private int a;
private int b;
// getters etc...
}
目标类:
class Target {
private String a;
private String b;
// getters etc...
}
映射器:
@Mapping(source=\"a\", target=\"a\") // should not be necessary, but to make it more explicit
@Mapping(target=\"b\", expression = \"java(modify(b))\")
public abstract Target sourceToTarget(Source source);
String modify(int value) {
return \"prefix_\" + value;
}
我想要达到的目标:
target.setA(String.valueOf(a));
target.setB(modify(b));
但是,生成的代码会这样做:
target.setA(modify(a));
target.setB(modify(b));
删除表达式和 modify 时,MapStruct 将 String.valueOf 用于这两个值。
我用 MapStruct 1.4.2.FINAL 和 1.5.2.FINAL 都试过了。这两个类都使用了 Lombok,但是,这在过去不是问题。
这种行为是预期的吗?如果是,我还能如何使它工作?
-
@Named限定符modify()与@Mapping#qualifiedByName配对应该可以解决您的问题。检查官方文档。