为了账号安全,请及时绑定邮箱和手机立即绑定

Mapstruct:当源为空时如何将目标字符串默认为空字符串Java / Spring

Mapstruct:当源为空时如何将目标字符串默认为空字符串Java / Spring

尚方宝剑之说 2023-03-31 15:06:38
我有两个对象源和目标,它们都具有相同的字段名称和类型。如果源字段为空,我希望目标为“”(空字符串)我的接口映射看起来像这样(这只是两个字段,我有很多)@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)public interface MyMapper {@Mappings({    @Mapping(target="medium", defaultExpression="java(\"\")"),    @Mapping(target="origin", defaultExpression="java(\"\")") }) public Target mapFrom(Source source)如果 Source 有一个值,它应该被复制,如果它在源中为空,那么在目标中它应该是“”。Mapstruct-1.3.0 似乎只是让一切都为空。任何想法?我希望一切都默认为空字符串
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您需要设置NullValuePropertyMappingStrategy(作为注释的一部分Mapper)以定义如何映射空属性。

参见NullValuePropertyMappingStrategy.html#SET_TO_DEFAULT

String的默认值为""。您不需要明确定义它。

所以,你的映射器可以简单地看起来像这样:

@Mapper(

    componentModel = "spring", 

    nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT, 

    nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT

)

public interface MyMapper {


    public Target mapFrom(Source source);


}


查看完整回答
反对 回复 2023-03-31
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

当您的 Source 对象具有与 Target 对象相同的字段并且当您想要管理所有 Source值(例如对于 String)成为Target 对象中的空字符串(“”)时,您可以从MapStruct库创建映射器接口,如下所示:

步骤1:

@Mapper(componentModel = "spring")

public interface SourceToTargetMapper {


  Target map(Source source);


  @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)

  void update(Source source, @MappingTarget Target target);

}

整个技巧是定义nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但您不能在 @Mapper 注释中定义它。取而代之的是,您必须将它作为参数放在update()方法的 @BeanMapping 注释中。您可以在MapStruct 文档中阅读更多相关信息。


第2步:

因此,您必须在代码中再执行一项操作并使用刚刚实现的“update()”方法:


@Component

public class ClassThatUsingMapper {


  private final SourceToTargetMapper mapper;


  public Target someMethodToMapObjects(Source source) {

    Target target = mapper.map(source);

    mapper.update(source, target)


    return target;

  }

}


所有null 到空 String 的过程都发生在mapper.update(source, target)method 下。为您的项目运行后mvn clean install,您可以检查它的外观以及它在target/generated-sources/annotations/...../SourceToTargetMapperImpl.java文件中的工作方式。


查看完整回答
反对 回复 2023-03-31
  • 2 回答
  • 0 关注
  • 1089 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信