首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MapStruct -如何为不同的映射方法设置不同的空策略?

MapStruct -如何为不同的映射方法设置不同的空策略?
EN

Stack Overflow用户
提问于 2019-01-14 08:15:50
回答 2查看 13.3K关注 0票数 5

我希望有一个同时包含createupdate方法的Mapper类。为create方法生成的代码很好,但在更新的情况下,我希望设置目标中的属性,前提是它们在源代码中不为空。

我如何用mapStruct来做这件事?

因为nullValueMappingStrategy是在MapperMapping级别定义的,所以产生了混淆。

如果我在Mapper级别设置该值,它将应用于所有方法,包括创建和更新。

代码语言:javascript
运行
复制
@Mapper // If I define null strategy here, it will be applied to all methods
public interface AmcPkgMapper {

    AmcPkgMapper MAPPER = Mappers.getMapper(AmcPkgMapper.class);

    AmcPackage create(AmcPackageRequest amcPackageRequest);

    // How to define the null strategy here??
    void update(AmcPackageRequest amcPackageRequest, @MappingTarget  AmcPackage amcPackage);

}

如果我用Mapping在方法上设置它,那么它会让我定义一个target对象,对于这个对象,我可能需要一个包装器对象,并以某种方式映射其中的所有内部属性。

代码语言:javascript
运行
复制
@Mapping(target = "amcPackage", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackageWrapper amcPackageWrapper);

使用上面的方法,生成的代码如下所示,它不会在amcPackage中设置所有属性。

代码语言:javascript
运行
复制
@Override
public void update(AmcPackageRequest amcPackageRequest, AmcPackageWrapper amcPackageWrapper) {
    if ( amcPackageRequest == null ) {
        return;
    }
// nothing is mapped actually!!
}

有没有一种简单的方法,不用为创建和更新创建单独的映射器类?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-15 00:06:41

我用@BeanMapping完成了

代码语言:javascript
运行
复制
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
            nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackage amcPackage);
票数 26
EN

Stack Overflow用户

发布于 2020-09-05 16:59:07

全局配置

代码语言:javascript
运行
复制
@MapperConfig(
        componentModel = "spring",
        nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE
)
public interface BaseMapperConfig {
}

现在,您的映射器开始运行:

代码语言:javascript
运行
复制
@Mapper(config = BaseMapperConfig.class)
public interface SomeObjectMapper {
...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54174437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档