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

我有两个对象源和目标,它们都具有相同的字段名称和类型。


如果源字段为空,我希望目标为“”(空字符串)


我的接口映射看起来像这样(这只是两个字段,我有很多)


@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 似乎只是让一切都为空。


任何想法?我希望一切都默认为空字符串


尚方宝剑之说
浏览 1090回答 2
2回答

慕码人2483693

您需要设置NullValuePropertyMappingStrategy(作为注释的一部分Mapper)以定义如何映射空属性。参见NullValuePropertyMappingStrategy.html#SET_TO_DEFAULTString的默认值为""。您不需要明确定义它。所以,你的映射器可以简单地看起来像这样:@Mapper(    componentModel = "spring",     nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,     nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)public interface MyMapper {    public Target mapFrom(Source source);}

Cats萌萌

当您的 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()”方法:@Componentpublic 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文件中的工作方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java