Mapstruct:在@Mapping 的源参数中使用上下文
Mapstruct : Use of context in source argument of @Mapping
在@Mapper 中使用多个参数时,似乎无法访问@Context 参数
public interface MyMapper {
@Mapping(target="target1", source="arg1.arg") //works
@Mapping(target="target2", source="arg2") //works
@Mapping(target="target3", source="arg2.arg") //works
@Mapping(target="target2", source="context.arg") //NOT WORKING
public MyTarget convert(Object arg1, Object arg2, @Context Object context);
}
我正在尝试使用 expression=""
来解决它,但我无法让它工作。
有什么建议吗?
我可以看出我不是唯一一个希望如此的人。
https://github.com/mapstruct/mapstruct/issues/1280
谢谢
根据定义,@Context
注释对象不是源。它是上下文 所以你不能在 @Mapping(target="target2", source="context.arg")
中将它用作 source
这是一个相关的 github 问题,官方回答:github issue
回答你的第二个问题:
public interface MyMapper {
@Mapping(target="target1", source="arg1.arg")
@Mapping(target="target2", ignore = true ) // leave to after mapping
MyTarget convert(Object arg1, @Context Object context);
@AfterMapping
default convert(Object arg1, @MappingTarget MyTarget target, @Context context) {
target.setTarget2( convert ( context ) );
}
// if you have multipe mappings, you could address them here
@Mapping(target="target2", source="context.arg")
MyInnerTarget convert(Object arg1, Object context);
}
我 运行 进入相同的场景,因为我需要一个 @Context
参数才能传递给嵌套映射函数,但也想将它用作 [=12] 中的源=].我能够使用 expression
实现这一点,如下所示:
public interface MyMapper {
@Mapping(target="target1", source="arg1")
@Mapping(target="target2", source="arg2")
@Mapping(target="target3", expression="java( contextArg )")
public MyTarget convert(Object arg1, Object arg2, @Context Object contextArg);
}
在@Mapper 中使用多个参数时,似乎无法访问@Context 参数
public interface MyMapper {
@Mapping(target="target1", source="arg1.arg") //works
@Mapping(target="target2", source="arg2") //works
@Mapping(target="target3", source="arg2.arg") //works
@Mapping(target="target2", source="context.arg") //NOT WORKING
public MyTarget convert(Object arg1, Object arg2, @Context Object context);
}
我正在尝试使用 expression=""
来解决它,但我无法让它工作。
有什么建议吗?
我可以看出我不是唯一一个希望如此的人。 https://github.com/mapstruct/mapstruct/issues/1280
谢谢
根据定义,@Context
注释对象不是源。它是上下文 所以你不能在 @Mapping(target="target2", source="context.arg")
source
这是一个相关的 github 问题,官方回答:github issue
回答你的第二个问题:
public interface MyMapper {
@Mapping(target="target1", source="arg1.arg")
@Mapping(target="target2", ignore = true ) // leave to after mapping
MyTarget convert(Object arg1, @Context Object context);
@AfterMapping
default convert(Object arg1, @MappingTarget MyTarget target, @Context context) {
target.setTarget2( convert ( context ) );
}
// if you have multipe mappings, you could address them here
@Mapping(target="target2", source="context.arg")
MyInnerTarget convert(Object arg1, Object context);
}
我 运行 进入相同的场景,因为我需要一个 @Context
参数才能传递给嵌套映射函数,但也想将它用作 [=12] 中的源=].我能够使用 expression
实现这一点,如下所示:
public interface MyMapper {
@Mapping(target="target1", source="arg1")
@Mapping(target="target2", source="arg2")
@Mapping(target="target3", expression="java( contextArg )")
public MyTarget convert(Object arg1, Object arg2, @Context Object contextArg);
}