如何为mapstruct指定默认Map方法

i5desfxk  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(525)

我有一个简单的对象客户端

public class Client {
    String externalCode;
    String name;
    String surname;
}

我想把它Map到几乎相同的物体上

public class User {
    String internalCode;
    String name;
    String surname;
}

看,我想把外部代码Map到内部代码。我有一个方法可以做到这一点。我已经用自定义@codemapping注解标记了我的方法,并将该注解放在qualifiedby参数中。所以,这是我的Map。

@Mapper()
ClientMapper {
     @CodeMapping
     String toInternalCode(String externalCode) {
          return externalCode + " internal part";
     }

    @Mapping(target = "internalCode", source = "externalCode", qualifiedBy = CodeMapping.class)
    User toUser(Client client);
}

问题是名称和姓氏字段也使用tointernalcode方法Map。mapstruct看到我定义了一个方法,它将字符串Map到字符串,并认为应该在所有情况下使用它。
有没有办法告诉mapstruct,如果没有指定限定符,应该使用直接Map?或者创建一个我自己的方法,它接受string并返回它,然后告诉mapstruct默认情况下应该使用该方法?

cwtwac6a

cwtwac6a1#

很可能是 toInternalCode 被所有方法使用,因为 @CodeMapping 注解不是元注解 @Qualifier (来自 org.mapstruct.Qualifier ).
这个 @CodeMapping 应按以下方式定义:

import org.mapstruct.Qualifier;

@Qualifier
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface CodeMapping {
}

相关问题