[英]Mapper is not using another mapper, how to use a mapper from another mapper?
[英]using mapper in another mapper method
我想在命名方法的另一個映射器中使用映射器,如何在不使用Mappers.getMapper()
的情況下執行此操作?
例子:
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
unmappedTargetPolicy = ReportingPolicy.IGNORE,
uses = {BMapper.class})
public interface AMapper {
//some methods here
@Named("getResultList")
default List<Result> getResultList(Argument args) {
BMapper bMapper = Mappers.getMapper(BMapper.class);
return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
}
}
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
unmappedTargetPolicy = ReportingPolicy.IGNORE
)
public interface BMapper {
//some methods here
Result toDto(Arg2 arg2)
}
我知道使用BMapper bMapper = Mappers.getMapper(BMapper.class)
對componentModel = "spring"
不好,但是還有其他選擇嗎? PS 這是一個簡單的示例,但是命名方法中的邏輯可能比所呈現的要復雜得多。 理想情況下,我想在另一個映射器的命名方法中使用映射器
我會說你的方法應該已經工作了 90%。 對我來說,只需進行一些簡單的調整;)。 屬性“uses = BMapper.class”應該可以解決問題。 你所要做的就是復制你的
@Named("getResultList")
default List<Result> getResultList(Argument args) {
BMapper bMapper = Mappers.getMapper(BMapper.class);
return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
}
進入另一個映射器(MapperB)。 那么你的結果是
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
unmappedTargetPolicy = ReportingPolicy.IGNORE,
uses = BMapper.class)
public interface AMapper {
//some methods here
}
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface BMapper {
//some methods here
Result toDto(Arg2 arg2)
@Named("getResultList")
default List<Result> getResultList(Argument args) {
BMapper bMapper = Mappers.getMapper(BMapper.class);
return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
}
在 MapperA 中,您仍然可以通過以下方式訪問“getResultList”方法
qualiviedByName = "getResultList"
照常。
一個小旁注。 當有多個具有相同配置的映射器時,使用 @MapperConfig 注釋可能是有益的。
@MapperConfig(
componentModel = "spring",
builder = @Builder(disableBuilder = true),
// your remaining config here
)
public interface GlobalMappingConfig {
}
並簡單地注釋你的映射器
@Mapper(config = GlobalMappingConfig.class)
或者如果 MapperA
@Mapper(config = GlobalMappingConfig.class, uses = MapperA.class)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.